为什么在制作Spring项目时我没有接触到weaver警告?

时间:2013-05-11 22:54:15

标签: java spring aspectj

当我制作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配置。

2 个答案:

答案 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>