Java aspectj-类型间方法声明不适用于Maven

Java aspectj-类型间方法声明不适用于Maven,java,maven,aspectj,aspectj-maven-plugin,Java,Maven,Aspectj,Aspectj Maven Plugin,我在用Maven和AspectJ编译项目时遇到困难 这是aspectj maven插件的POM摘录(摘自有效POM): 仅将范围缩小到单个案例: [INFO] Type 'org.jcz.persistence.jpa.model.Band' (Band.java) has intertyped method from 'org.jcz.aspects.persistence.UUIDSupportAspect' (UUIDSupportAspect.aj:'java.io.Serializab

我在用Maven和AspectJ编译项目时遇到困难

这是aspectj maven插件的POM摘录(摘自有效POM):

仅将范围缩小到单个案例:

[INFO] Type 'org.jcz.persistence.jpa.model.Band' (Band.java) has intertyped method from 'org.jcz.aspects.persistence.UUIDSupportAspect' (UUIDSupportAspect.aj:'java.io.Serializable org.jcz.aspects.persistence.UUIDSupportAspect$WithUUID.getId()')
因此,看起来方法
getId()
被正确地注入了类
Band
。但是当Maven继续测试编译和单元测试时:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile (default-testCompile) on project jcz-persistence-jpa: Compilation failure: Compilation failure:
在其他错误细节中,我得到了

[ERROR] /home/stefano/projects/java/jcz-persistence-jpa/src/test/java/org/jcz/persistence/jpa/ServiceTestCase.java:[182,45] cannot find symbol
[ERROR] symbol:   method getId()
[ERROR] location: variable persisted of type org.jcz.persistence.jpa.model.Band
[ERROR] /home/stefano/projects/java/jcz-persistence-jpa/src/test/java/org/jcz/persistence/jpa/ServiceTestCase.java:[182,60]
好像我所有的类型间声明的东西都没有被注入

为了检查代码中是否有错误,我尝试在Eclipse中运行JUnit测试,一切正常

所以我猜maven编译过程中有一些我没有正确设置的东西


有人能帮我了解问题的原因吗?

终于想出了解决办法。离开这里

我解决这个问题的方法是像这样配置
maven编译器插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>${maven-compiler-plugin.version}</version>
    <configuration>
        <source>1.${java.version}</source>
        <target>1.${java.version}</target>
        <useIncrementalCompilation>false</useIncrementalCompilation>
    </configuration>
</plugin>

org.apache.maven.plugins
maven编译器插件
${maven编译器plugin.version}
1.${java.version}
1.${java.version}
假的

如果最重要的部分是
false

要使类型间声明与aspectj maven插件一起工作,需要通过添加一个选项FailOneError来配置maven编译器插件:

            <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <failOnError>false</failOnError>
            </configuration>
        </plugin>

org.apache.maven.plugins

这实际上是Maven编译器插件中一个已知但尚未解决的问题,因为开关的作用与它所宣传的相反。如果将开关设置为
false
,它实际上会使用增量编译。很烦人。我在这里的很多答案中都提到过,只是有一段时间没有出现,但你自己发现了。:-)顺便说一句,为了结束这个问题,你可以接受你自己的答案。非常感谢@kriegaex!即使我当时解决了这个问题,我也从来没有问过它发生的原因。现在我知道了,我还解决了在最新的Eclipse版本中编译时遇到的一个问题(2019年末以后):-)
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>${maven-compiler-plugin.version}</version>
    <configuration>
        <source>1.${java.version}</source>
        <target>1.${java.version}</target>
        <useIncrementalCompilation>false</useIncrementalCompilation>
    </configuration>
</plugin>
            <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <failOnError>false</failOnError>
            </configuration>
        </plugin>