【问题标题】:How to make Maven Javadoc Plugin work with any Java version如何使 Maven Javadoc 插件适用于任何 Java 版本
【发布时间】:2019-11-26 14:52:00
【问题描述】:

我正在使用这样的 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 上失败并出现以下错误

未能执行目标 org.apache.maven.plugins:maven-javadoc-plugin:3.1.1:jar (attach-javadocs) 项目 ...: MavenReportException: Error while 生成 Javadoc:找不到 javadoc 命令:环境 变量 JAVA_HOME 未正确设置。

显而易见的解决方案是设置 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 插件的方法。

【问题讨论】:

  • “这使它可以与 Java 11 一起使用,但会破坏 Java 8,因为在这种情况下,javadoc 的位置是 ${java.home}/../bin/javadoc。” Java 8 javadoc 是怎么来的 ${java.home}/../bin/javadoc?我检查了自己的 Java 8。它是 ${java.home}/bin/javadoc
  • @QingfeiYuan 尝试使用 JDK 8 运行System.out.println(System.getProperty("java.home"));。输出将是&lt;your jdk directory&gt;/jre,而javadoc&lt;your jdk directory&gt;/bin 中。
  • 哦.. 如果是这样,那很简单,不要使用${java.home}。使用{$JAVA_HOME}这个环境变量是你自己定义的。
  • @QingfeiYuan 请重读我的问题。我解释了为什么我不想使用 JAVA_HOME。

标签: java maven maven-javadoc-plugin


【解决方案1】:

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 工具链。我没有这些经验,除了阅读它们有助于更轻松地定义各种机器上的工具位置。

【讨论】:

  • 它在 JDK 7-12 上运行良好,谢谢!我编辑了您的答案,为可能有相同问题的其他人添加了正确的 javadoc 路径。我在maven-javadoc-plugin插件配置&lt;configuration&gt;&lt;javadocExecutable&gt;${javadocExecutable}&lt;/javadocExecutable&gt;&lt;/configuration&gt;中这样使用。
  • 使用该属性名称,您可能不需要显式插件配置。属性的名称是在插件中配置值的正确名称——the plugin mojo doc中为该元素指定的“用户属性”@
  • 你是对的。我没有意识到。不需要我之前评论中的配置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-29
  • 1970-01-01
  • 2017-02-15
  • 1970-01-01
  • 2014-08-01
  • 2018-04-05
  • 1970-01-01
相关资源
最近更新 更多