Mojo 的 AspectJ Maven 插件是否适用于 jdk 9+?

Does Mojo's AspectJ Maven Plugin work with jdk 9+?

我有一个使用 Mojo 的 AspectJ Maven 插件的项目。它适用于 jdk 8。当我尝试切换到 jdk14 时,构建失败并出现以下错误:

[ERROR] Failed to execute goal org.codehaus.mojo:aspectj-maven-plugin:1.11:compile (default) on project AspectJDemo: Execution default of goal org.codehaus.mojo:aspectj-maven-plugin:1.11:compile failed: Plugin org.codehaus.mojo:aspectj-maven-plugin:1.11 or one of its dependencies could not be resolved: Could not find artifact com.sun:tools:jar:13.0.2 at specified path /usr/local/Cellar/openjdk/13.0.2+8_2/libexec/openjdk.jdk/Contents/Home/../lib/tools.jar -> [Help 1]

Mojo's website confirms that this file is a required dependency. However, according to this tools.jar 已从 jdk 9 开始删除。我尝试在我的依赖项中提供此 jar 文件的硬编码路径,如下所示:

        <dependency>
            <groupId>com.sun</groupId>
            <artifactId>tools</artifactId>
            <version>1.8</version>
            <scope>system</scope>
            <systemPath>/path/to/tools.jar</systemPath>
        </dependency>

但是随后构建完全失败,就好像它完全停止识别 Java 一样。我收到许多错误,例如:

[ERROR] can't find critical required type java.lang.Object
        <unknown source file>:<no line information>

这是否意味着 Mojo 的 AspectJ Maven 插件不支持 jdk9+?任何有关如何解决此问题的想法都将受到赞赏。

2021-10-26更新: 因为评论里有人问了,简述一下现状:

  • 作为 AspectJ 的共同维护者,我也在维护 AspectJ.dev AspectJ Maven Plugin,因为不再维护 Nick 的版本。当前版本 dev.aspectj:aspectj-maven-plugin:1.13.1 支持 Java 17,默认情况下使用 AspectJ 1.9.8.RC1,它也完全支持 Java 17。它比其他上游和分支变体具有更多功能,并且是我推荐的变体。它还可以解析大于 17 的版本号,即将来您可以简单地升级 AspectJ 插件依赖项并提高 Java 合规级别,而无需升级插件版本,除非您需要新的插件功能。

  • 最近 Mojohaus 也有一些 activity,主要是因为我问他们是否可以声明他们的插件已弃用,因为 3.5 年内没有发布和支持问题和 PR很长一段时间都被忽视了。当他们注意到我发布了我自己的版本时,因为作为 AspectJ 贡献者我担心 Maven 用户已经被孤立了这么长时间,他们合并了我的一些(不是全部)更改并发布了支持的 1.14.0 版本Java 16,但不是 Java 17。

话虽如此,我推荐这个插件:

<dependency>
    <groupId>dev.aspectj</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <version>1.13.1</version>
</dependency>

此答案的上一版本(现已过时): 该插件自 Java 8 以来就没有维护过,但有一个 fork with a pull request 待维护接受上游。由于 Mojohaus 没有该插件的活跃维护者,并且分支的开发人员尚未被授予接管和推出上游版本的访问权限,现在只需使用此分支:

<dependency>
    <groupId>com.nickwongdev</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <version>1.12.6</version>
</dependency>

我已经用了很长时间了,它很可靠,至少可以工作到 Java13。即使是最新版本的 IntelliJ IDEA 也会自动识别它作为 Mojohaus 版本的替代品,因为这个过程已经花了这么长时间。

P.S.: 无需提供硬编码路径,只需使用替代插件即可。 :-)