Создание примера AspectJ-проекта в IntelliJ IDEA - PullRequest
0 голосов
/ 22 января 2019

Я создаю проект в IntelliJ IDEA на основе Maven и AspectJ.К сожалению, все попытки провалились (т.е. аспект, кажется, игнорируется).

Я создал наименьший возможный тест-проект с maven-файлом.Это выглядит так:

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.9.2</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.2</version>
        </dependency>
    </dependencies>

    <build>
        <sourceDirectory>src/main/java</sourceDirectory>

        <plugins>
            <plugin>
                <groupId>com.nickwongdev</groupId>
                <artifactId>aspectj-maven-plugin</artifactId>
                <version>1.12.1</version>
                <configuration>
                    <complianceLevel>11</complianceLevel>
                    <source>11</source>
                    <target>11</target>
                    <showWeaveInfo>true</showWeaveInfo>
                    <verbose>true</verbose>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>test-compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.6.0</version>
                <configuration>
                    <mainClass>de.benchmarktest.Main</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>

Мне пришлось использовать aspectj-maven-plugin из com.nickwongdev, чтобы иметь возможность компилировать с Java 11.

Идея была взята из примера спростой Account -класс:

package de.benchmarktest;

public class Account {

    int balance = 20;

    public boolean withdraw(int amount) {
        balance -= amount;
        return true;
    }

}

AccountAspect.aj выглядит следующим образом:

package de.benchmarktest;

public aspect AccountAspect {
    pointcut callWithDraw(int amount, Account acc) :
            call(boolean de.benchmarktest.Account.withdraw(int)) && args(amount) && target(acc);

    boolean around(int amount, Account acc) :
            callWithDraw(amount, acc) {
        if (acc.balance < amount) return false;
        return proceed(amount, acc);
    }

}

Если я сейчас создам пример метода Main, например, так:

package de.benchmarktest;

public class Main {

    public static void main(String[] args) {
        Account acc = new Account();
        System.out.println(acc.withdraw(10));
        System.out.println(acc.withdraw(20));
    }

}

Я предполагаю, что результат должен быть true, за которым следует false.Infact, это в два раза true.Поэтому Aspect, похоже, не запускается.

Если запустить компиляцию вручную из консоли через mvn package, я получу [WARNING] No sources found skipping aspectJ compile.Как научить систему запускать аспекты при компиляции исходного кода?Заранее благодарим за помощь!

...