由于缺少 tools.jar,Maven AspectJ 插件无法使用 Java 9 构建
Posted
技术标签:
【中文标题】由于缺少 tools.jar,Maven AspectJ 插件无法使用 Java 9 构建【英文标题】:Maven AspectJ plugin fails to build with Java 9 due to missing tools.jar 【发布时间】: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>
【问题讨论】:
【参考方案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 日,该修复程序尚未发布。以上是关于由于缺少 tools.jar,Maven AspectJ 插件无法使用 Java 9 构建的主要内容,如果未能解决你的问题,请参考以下文章
Maven:POM.xml 中缺少工件 com.sun:tools:jar:1.6.0 编译时异常 [重复]
Maven项目缺少Jar包--jdk.toolss:jar:1.8
Maven引入Hadoop依赖报错:Missing artifact jdk.tools:jdk.tools:jar:1.6