如何使Maven Javadoc插件与任何Java版本一起使用

时间:2019-07-17 17:37:25

标签: 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上失败,并显示以下错误

  

无法执行目标   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>

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

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

1 个答案:

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

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