当我制作Spring项目时,我似乎得到了一堆这样的警告。该项目使用Compile Time Weaving和各种Spring注释,如Transactional,Autowired和Configurable。
我有三个问题:它们是什么(效果是什么)?我应该关注他们吗?和“我该怎么做才能删除它们?”
ajc: this affected type is not exposed to the weaver: com.myapp.domain.UserEntity [Xlint:typeNotExposedToWeaver]
让我知道您需要帮助我解决此问题。我可以发布POM文件的相关部分,部分Java Spring配置文件或其他任何内容。我真的不知道需要什么,所以请告诉我。
我在春季论坛上看到了它,但那个地方是一个鬼城。有几个人问过这个问题,但没有答案。
我正在使用Spring和CTW的Java配置。
答案 0 :(得分:7)
它们是什么(效果是什么)?
它(ajc
)说它已经找到了一些它认为应该是或被“编织”的类,但是这不能完成/没有完成。
我应该关注他们吗?
是。这意味着AspectJ编译时编织不会发生;即某些类别的注释不会生效。
我该怎么做才能删除它们?
更改构建配置,以便编织者可以找到编织所需的所有代码。
我猜你的应用程序涉及多个Maven模块。如果是这样,那么这个答案有一些指向相关Eclipse / AspectJ和Maven文档的链接:https://stackoverflow.com/a/13120709/139985。似乎需要明确告诉AspectJ Maven插件在哪里查找内容。
答案 1 :(得分:0)
我有类似的问题。仔细观察后,我意识到警告仅在test-compile
阶段发生,其中aspectj不够智能,无法自动查看主java源目录以及测试源目录。我通过将两个目标分成不同的配置来解决它。 POM的相关部分如下:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.10</version>
<configuration>
<complianceLevel>1.8</complianceLevel>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
<source>1.8</source>
<target>1.8</target>
</configuration>
<executions>
<execution>
<id>compile</id>
<goals>
<goal>compile</goal>
</goals>
</execution>
<!-- add explicit instructions for test compile or it can't weave main src classes -->
<execution>
<id>test-compile</id>
<configuration>
<goals>
<goal>test-compile</goal>
<sources>
<basedir>${project.basedir}</basedir>
<includes>
<include>src/main/java/**/*.java</include>
<include>src/test/java/**/*.java</include>
</includes>
</sources>
</goals>
</configuration>
</execution>
</executions>
</plugin>