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

Joh*_*n29 8 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>
Run Code Online (Sandbox Code Playgroud)

我安装了多个 JDK 版本,并且希望能够使用其中任何一个版本构建项目。上面的配置在 Java 8 上工作正常,但在 Java 11 上失败并出现以下错误

无法在项目上执行目标 org.apache.maven.plugins:maven-javadoc-plugin:3.1.1:jar (attach-javadocs) ...: MavenReportException: 生成 Javadoc 时出错: 无法找到 javadoc 命令: 环境变量JAVA_HOME 设置不正确。

显而易见的解决方案是设置 JAVA_HOME。但正如我提到的,我有多个版本的 JDK,因此每次我想使用另一个版本时都重新配置 JAVA_HOME 一点也不方便。

另一个解决方案(来自Unable to find javadoc command - maven)是将以下配置添加到插件中:

<configuration>
    <javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
</configuration>
Run Code Online (Sandbox Code Playgroud)

这使得它可以与 Java 11 一起使用,但会破坏 Java 8,因为javadoc位置就${java.home}/../bin/javadoc在这种情况下。

理想情况下,我总是想从 Maven 使用的 java 可执行文件所在的目录中使用javadoc,但我还没有找到使用 Maven Javadoc 插件来实现这一点的方法。

use*_*849 9

Maven 配置文件可能会有所帮助。

将这样的内容添加到您的 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>
Run Code Online (Sandbox Code Playgroud)

JDK 范围也是可能的,请阅读链接文档中的更多信息。

Maven 将选择用于运行自身的 Java 版本、激活正确的配置文件并定义正确的属性。

需要注意的是 - 通常我们使用JAVA_HOMEset 构建,或者通过 Jenkins 构建,可以将其配置为定义JAVA_HOME每个作业。这种方法在这些情况下效果很好。

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

  • 它在 JDK 7-12 上运行良好,谢谢!我编辑了您的答案,为可能有相同问题的其他人添加正确的 javadoc 路径。我在 maven-javadoc-plugin 插件配置 `&lt;configuration&gt;&lt;javadocExecutable&gt;${javadocExecutable}&lt;/javadocExecutable&gt;&lt;/configuration&gt;` 中这样使用它。 (3认同)
  • 使用该属性名称,您可能不需要显式的插件配置。属性的名称是在插件中配置值的正确名称 - 在[插件 mojo 文档](https://maven.apache.org/plugins/maven-javadoc- 中为此元素指定的“用户属性”插件/javadoc-mojo.html) (2认同)