【问题标题】:Does Mojo's AspectJ Maven Plugin work with jdk 9+?Mojo 的 AspectJ Maven 插件是否适用于 jdk 9+?
【发布时间】:2020-09-24 05:17:47
【问题描述】:

我有一个使用 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 确认此文件是必需的依赖项。但是,根据thistools.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+?任何关于我如何解决这个问题的想法都值得赞赏。

【问题讨论】:

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


    【解决方案1】:

    2021 年 10 月 26 日更新:因为有人在评论中提问,所以简要概述了现状:

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

    • 最近 Mojohaus 也有一些活动,主要是因为我问他们是否可以宣布他们的插件已弃用,因为 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 以来一直未维护,但有一个 forkpull request 被上游接受。因为 Mojohaus 没有该插件的活跃维护者,并且分支的开发人员尚未获得接管和推出上游版本的访问权限,所以现在只需使用这个分支:

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

    我已经使用了很长时间,它很可靠,并且至少可以运行到 Java 13。即使是最新版本的 IntelliJ IDEA 也会自动将其识别为 Mojohaus 版本的替代品,因为这个过程已经花费了很长时间。

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

    【讨论】:

    • 您能否根据您自己的贡献编辑您的答案。非常感谢您的合作和倡议 :) com.nickwongdev is out of the game.
    • Nick 的 1.12.6 仍然是当前版本。我刚刚发布了一个支持 Java 14-16 的 1.12.7-SNAPSHOT 版本,还没有发布。我想等到 AspectJ 1.9.7 发布后才能让 AspectJ Maven 依赖它。目前它也依赖于 1.9.7-SNAPSHOT。不过谢谢你的提醒。
    • aspectj-maven-plugin 1.14.0 现已发布,应该支持更新的 Java 版本。
    • 是的,直到 Java 16。我在 1.13 版本中组 ID dev.aspectj 的 fork 已经支持 Java 17 并且具有更多功能。
    • @kriegaex aspectj-maven-plugin 1.14.0 (Group :org.codehaus.mojo) 支持 OpenJDK17 吗?
    猜你喜欢
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多