【问题标题】:Maven AspectJ plugin fails to build with Java 9 due to missing tools.jar由于缺少 tools.jar,Maven AspectJ 插件无法使用 Java 9 构建
【发布时间】:2018-06-18 19:53:39
【问题描述】:

我将我的 JDK 版本从 8 切换到 9,由于缺少 tools.jar,AspectJ 插件不再工作:

目标 org.codehaus.mojo:aspectj-maven-plugin:1.10:compile failed 的执行默认值:无法解析插件 org.codehaus.mojo:aspectj-maven-plugin:1.10 或其依赖项之一: 在指定路径 C:\Program Files\Java\jdk-9.0.1/../lib/tools.jar 找不到工件 com.sun:tools:jar:9.0.1

我了解 tools.jar(和 rt.jar)已从 Java 9 JDK 中删除。我想知道是否有办法让 Maven AspectJ 插件在没有 tools.jar 的情况下与 Java 9 一起工作?

这是我的插件定义和版本信息:

    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>aspectj-maven-plugin</artifactId>
      <version>1.10</version>
      <configuration>       
      <encoding>${project.build.sourceEncoding}</encoding>
      <complianceLevel>1.9</complianceLevel>
      <showWeaveInfo>true</showWeaveInfo>
      <XnoInline>true</XnoInline>         
      </configuration>
      <executions>
        <execution>
          <goals>
            <goal>compile</goal>
              <goal>test-compile</goal>
          </goals>
        </execution>
      </executions>     
      <dependencies>
       <dependency>
       <groupId>org.aspectj</groupId>
       <artifactId>aspectjrt</artifactId>
       <version>1.9.0.RC2</version>
      </dependency> 
      <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjtools</artifactId>
        <version>1.9.0.RC2</version>
       </dependency>          
      </dependencies>
    </plugin>

【问题讨论】:

    标签: java maven maven-plugin aspectj-maven-plugin


    【解决方案1】:

    你检查过最新的插件版本吗?

    <groupId>org.codehaus.mojo</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <version>1.11</version>
    

    【讨论】:

    • 与 1.11 版相同的问题:目标 org.codehaus.mojo:aspectj-maven-plugin:1.11 的执行默认值:编译失败:插件 org.codehaus.mojo:aspectj-maven-plugin:1.11 或无法解析其依赖项之一:在指定路径 C:\Program Files\Java\jdk-9.0.4/../lib/tools.jar
    • @MrkK,参见 izogfif 的 answer。这对我使用 Java 10.0.2 和你有同样的问题很有用。
    【解决方案2】:

    遇到了同样的问题,问题是这个传递依赖在aspectj-maven-plugin中默认是激活的。

    用这个 PR 为我修复了它 https://github.com/mojohaus/aspectj-maven-plugin/pull/35

    【讨论】:

      【解决方案3】:

      我刚刚发现了一个让 aspectj 与 Java 9 一起工作的丑陋技巧,只需将 com.sun:tools 指向 pom.xml,编译器就会运行。

      <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>aspectj-maven-plugin</artifactId>
          <version>1.11</version>
          <executions>
              <execution>
                  <goals>
                      <goal>compile</goal>
                      <goal>test-compile</goal>
                  </goals>
                  <configuration>
                      <source>1.8</source>
                      <target>1.8</target>
                      <complianceLevel>1.8</complianceLevel>
                      <encoding>UTF-8</encoding>
                      <verbose>true</verbose>
                      <weaveDependencies>
                          <weaveDependency>
                              <groupId>io.grpc</groupId>
                              <artifactId>grpc-netty</artifactId>
                          </weaveDependency>
                      </weaveDependencies>
                      <showWeaveInfo>true</showWeaveInfo>
                      <XnoInline>true</XnoInline>
                  </configuration>
              </execution>
          </executions>
          <dependencies>
              <dependency>
                  <groupId>org.aspectj</groupId>
                  <artifactId>aspectjrt</artifactId>
                  <version>${aspectj.version}</version>
              </dependency>
              <dependency>
                  <groupId>org.aspectj</groupId>
                  <artifactId>aspectjtools</artifactId>
                  <version>${aspectj.version}</version>
              </dependency>
              <dependency>
                  <groupId>com.sun</groupId>
                  <artifactId>tools</artifactId>
                  <version>${java.version}</version>
                  <scope>system</scope>
                  <systemPath>${project.basedir}/pom.xml</systemPath>
              </dependency>
          </dependencies>
      </plugin>
      

      【讨论】:

      • 哇,你是怎么发现的?它适用于 JDK 12。
      • 谢谢你,使用 JDK 9。如果能得到 mojo 的支持并且我们不需要这个 hack 那就太好了:-)
      【解决方案4】:

      org.codehaus.mojo 将版本1.11.1 发布到Maven Central 之前,请改用snapshot build

      <groupId>com.github.m50d</groupId>
      <artifactId>aspectj-maven-plugin</artifactId>
      <version>1.11.1</version>
      

      【讨论】:

      • @Enerccio 实际上是在 2021 年 5 月 30 日it was fixed,但截至 2021 年 7 月 16 日,该修复程序尚未发布。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      • 2020-02-25
      • 2018-08-10
      • 2013-07-01
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多