10

当我制作我的 Spring 项目时,我似乎收到了一堆这样的警告。该项目使用编译时编织和各种 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 配置。

4

2 回答 2

7

它们是什么(有什么作用)?

它 ( ajc) 是说它找到了一些它认为应该是或已经被“编织”的类,但这不能完成/尚未完成。

我应该担心他们吗?

是的。这意味着 AspectJ 编译时编织不会正确发生;即某些类的注释不会生效。

我能做些什么来删除它们?

更改您的构建配置,以便编织者可以找到它需要编织的所有代码。

我猜您的应用程序涉及多个 Maven 模块。如果是这样,那么这个答案有一些链接到相关的 Eclipse/AspectJ 和 Maven 文档:https ://stackoverflow.com/a/13120709/139985 。似乎需要明确告知 AspectJ Maven 插件在哪里寻找东西。

于 2013-05-11T23:38:27.063 回答
1

我有一个类似的问题。仔细检查后,我意识到警告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>
于 2017-09-29T20:06:55.993 回答