如何使 Maven Javadoc 插件与任何 Java 版本一起工作
How to make Maven Javadoc Plugin work with any Java version
我正在使用这样的 Maven Javadoc 插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
我安装了多个 JDK 版本,并希望能够使用其中任何一个构建项目。上面的配置在 Java 8 下工作正常,但在 Java 11 下失败并出现以下错误
Failed to execute goal
org.apache.maven.plugins:maven-javadoc-plugin:3.1.1:jar
(attach-javadocs) on project ...: MavenReportException: Error while
generating Javadoc: Unable to find javadoc command: The environment
variable JAVA_HOME is not correctly set.
显而易见的解决方案是设置JAVA_HOME。但正如我提到的,我有多个版本的 JDK,因此每次我想使用另一个版本时都重新配置 JAVA_HOME 一点也不方便。
另一种解决方案(来自Unable to find javadoc command - maven)是在插件中添加以下配置:
<configuration>
<javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
</configuration>
这使得它可以与 Java 11 一起使用,但会破坏 Java 8,因为在这种情况下 javadoc
位置是 ${java.home}/../bin/javadoc
。
理想情况下,我总是想在 Maven 使用的 java 可执行文件所在的目录中使用 javadoc
,但我还没有找到使用 Maven Java 的方法文档插件。
Maven profiles 或许可以提供帮助。
将类似的内容添加到您的 POM。
<profiles>
<profile>
<id>jdk-8-config</id>
<activation>
<jdk>1.8</jdk>
</activation>
<properties>
<javadocExecutable>${java.home}/../bin/javadoc</javadocExecutable>
</properties>
</profile>
<profile>
<id>jdk-11-config</id>
<activation>
<jdk>11</jdk>
</activation>
<properties>
<javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
</properties>
</profile>
</profiles>
JDK 范围也是可能的,请阅读链接文档中的更多信息。
Maven 将选择用于 运行 本身的 Java 版本,激活正确的配置文件,并定义 属性 正确。
一个警告 - 通常我们使用 JAVA_HOME
集构建,或者通过 Jenkins 构建,它可以配置为每个作业定义 JAVA_HOME
。这种方法在这些情况下效果很好。
您还可以研究 Maven 工具链。我对这些没有经验,除了阅读它们有助于更轻松地在各种机器上定义工具位置。
我正在使用这样的 Maven Javadoc 插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
我安装了多个 JDK 版本,并希望能够使用其中任何一个构建项目。上面的配置在 Java 8 下工作正常,但在 Java 11 下失败并出现以下错误
Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:3.1.1:jar (attach-javadocs) on project ...: MavenReportException: Error while generating Javadoc: Unable to find javadoc command: The environment variable JAVA_HOME is not correctly set.
显而易见的解决方案是设置JAVA_HOME。但正如我提到的,我有多个版本的 JDK,因此每次我想使用另一个版本时都重新配置 JAVA_HOME 一点也不方便。
另一种解决方案(来自Unable to find javadoc command - maven)是在插件中添加以下配置:
<configuration>
<javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
</configuration>
这使得它可以与 Java 11 一起使用,但会破坏 Java 8,因为在这种情况下 javadoc
位置是 ${java.home}/../bin/javadoc
。
理想情况下,我总是想在 Maven 使用的 java 可执行文件所在的目录中使用 javadoc
,但我还没有找到使用 Maven Java 的方法文档插件。
Maven profiles 或许可以提供帮助。
将类似的内容添加到您的 POM。
<profiles>
<profile>
<id>jdk-8-config</id>
<activation>
<jdk>1.8</jdk>
</activation>
<properties>
<javadocExecutable>${java.home}/../bin/javadoc</javadocExecutable>
</properties>
</profile>
<profile>
<id>jdk-11-config</id>
<activation>
<jdk>11</jdk>
</activation>
<properties>
<javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
</properties>
</profile>
</profiles>
JDK 范围也是可能的,请阅读链接文档中的更多信息。
Maven 将选择用于 运行 本身的 Java 版本,激活正确的配置文件,并定义 属性 正确。
一个警告 - 通常我们使用 JAVA_HOME
集构建,或者通过 Jenkins 构建,它可以配置为每个作业定义 JAVA_HOME
。这种方法在这些情况下效果很好。
您还可以研究 Maven 工具链。我对这些没有经验,除了阅读它们有助于更轻松地在各种机器上定义工具位置。