将AspectJ添加到pom.xml用Maven更改了Java版本,为什么?

2022-09-03 03:44:41

更新:这是我的maven-compiler-plugin配置:

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
            <source>1.6</source>
            <target>1.6</target>
        </configuration>

我使用 Maven 构建的多项目应用程序。我们决定添加AspectJ,所以我在顶级项目中添加了以下代码:(来自官方文档)pom.xml

<project>
  ...
  <dependencies>
    ...
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>1.7.3</version>
    </dependency>
    ...
  </dependencies>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>aspectj-maven-plugin</artifactId>
        <version>1.5</version>
        <executions>
          <execution>
            <goals>
              <goal>compile</goal>    <!-- use this goal to weave all your main classes -->
              <goal>test-compile</goal> <!-- use this goal to weave all your test classes -->
            </goals>
          </execution>
        </executions>
      </plugin>
      ...
    </plugins>
  <build>
  ...
</project>

以及每个从属项目的以下片段:

</project>
      ...  
      <build>
        ....
           <plugins>
               ...
            <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            </plugin>
         </plugins>
    </build>

        <dependencies>
          ...
         <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
         </dependency>
         ....
      </dependencies>
     ...  
 </project>

不知何故,这种修改已经覆盖了我使用的Java版本。如果我运行构建,我会收到多个错误,如下所示:

语法错误,仅当源级别为 1.5 或更高版本时,注释才可用

这让我怀疑我的Java版本(最初是1.6)以某种方式恢复到1.4。我没有做任何事情 - 至少不是故意的 - 可能会影响Java版本,所以我怀疑上面提到的AspectJ相关代码是造成更改的原因。

我的问题是AspectJ如何更改Java版本以及我应该如何解决这个问题。还是我完全误解了某些事情,我是否走错了路?


答案 1

我认为问题在于aspectj-maven-plugin的默认源代码目标合规性级别设置(根据之前链接的文档,分别为1.4,1.2和1.4)。您应该在父 pom 中显式设置这些内容:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            <version>1.5</version>
            <!-- new configuration is here -->
            <configuration>
                <complianceLevel>1.6</complianceLevel>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>test-compile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        ...
    </plugins>
<build>

答案 2

我失踪了

<complianceLevel>${java.level}</complianceLevel>

在我的绒球里.xml


推荐