java - 如何使 Maven Javadoc 插件适用于任何 Java 版本

标签 java maven maven-javadoc-plugin

我正在像这样使用 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 Javadoc 插件的方法。

最佳答案

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 构建,Jenkins 可以配置为为每个作业定义 JAVA_HOME。这种方法在这些情况下效果很好。

您还可以研究 Maven 工具链。我没有这方面的经验,除了阅读它们有助于更轻松地在各种机器上定义工具位置。

关于java - 如何使 Maven Javadoc 插件适用于任何 Java 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57081473/

相关文章:

Java:如何将RGB颜色转换为CIE Lab

maven - 如何列出特定 Maven 插件的所有目标

java - Spring boot docker插件每次都需要删除镜像

java - 自定义 MavenResourcesFiltering 很难实现?

java - 为所有模块设置备用 JavaDoc 位置的最佳方法?

maven-3 - 使用 Maven 生成 Javadoc HTML?

java - Jython:检查 Java 对象类型

java - glVertexAttribPointer 的 JOGL 错误

java - 使用 typesafe/akka config 合并多级配置