我应该使用啥版本的 Java 来开发我的 MOJO Maven 插件?

Posted

技术标签:

【中文标题】我应该使用啥版本的 Java 来开发我的 MOJO Maven 插件?【英文标题】:What version of Java should I use for developing my MOJO Maven Plugin?我应该使用什么版本的 Java 来开发我的 MOJO Maven 插件? 【发布时间】:2020-01-17 09:12:26 【问题描述】:

我目前正在实现一个新的 Maven 插件,我想使用 Java 11 进行编译和执行。

但是,我希望我们的大多数项目都可以使用我的 Maven 插件。其中一些在 Java 8 中运行,一些在 Java 11 中运行。

如果我希望将 Java 8 包含在其他项目中,是否必须在我的 Maven 插件中使用 Java 8?有没有办法在 Java 11 中实现它并使其可用于 Java 8 项目?

【问题讨论】:

如果您最终计划使用从您的类中创建的 JAR 创建工件,这并不重要,您可以使用 Java-8 或 Java-11 (MR-JAR) 开发它们。不同之处可能在于有人将它们公开为 JMOD,而不是在 Java-9 中引入,而 Maven 上没有太多工作反映在包装这种类型上。 “有没有办法在 Java 11 中实现它并使其可用于 Java 8 项目?” 不,您可以使用 Java 11 编译器,尽管它更容易使用 Java 8 编译器以确保兼容性(需要更少的编译器选项),但源代码仍然必须是 Java 8 代码,即不使用 Java 9+ 功能或 API。 【参考方案1】:

通常情况下:这取决于。并且与Maven Java在不同的层次上使用,所以这里需要一点解释:

您打算使用 Java 9+ 的特定功能/API 吗?

如果没有,您可以使用 Java 11 构建您的项目,但您需要将 <release>8</release> 添加到 maven-compiler-plugin 以确保代码与 Java 8 兼容。

如果您确实计划使用 Java 9+ 功能/API,请将 <release>11</release> 添加到 maven-compiler-plugin。现在您要求您的用户至少使用 Java 11 运行 Maven(这不是问题,即使 Maven 3.0 也可以在 Java 14-ea 上运行良好)。

即使 Maven 在 Java 11 上运行,您的用户仍然可以创建与 Java 8 兼容的项目(就像第一个项目符号中的“如果不是,...”),但大多数项目都用于使用 Java 8 运行和构建。

【讨论】:

以上是关于我应该使用啥版本的 Java 来开发我的 MOJO Maven 插件?的主要内容,如果未能解决你的问题,请参考以下文章

Java Maven MOJO - 从项目 POM 中获取信息

用于读取应用程序类和生成 java 的 maven mojo

我应该学习啥来提高我的技能? [关闭]

将价值从 Mojo 传递到 pom

作为开发人员,我应该啥时候测试我的网站?

在我的 Ubuntu 安装中,Java 的“1.8.0_191”是啥版本?