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

2023-12-31

我正在使用 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 一点也不方便。

另一种解决方案(来自无法找到 javadoc 命令 - maven https://stackoverflow.com/questions/13961615/unable-to-find-javadoc-command-maven)就是在插件中添加如下配置:

<configuration>
    <javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
</configuration>

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

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


Maven 配置文件 https://maven.apache.org/guides/introduction/introduction-to-profiles.html或许能帮上忙。

将这样的内容添加到您的 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 工具链。我对这些没有任何经验,除了阅读之外,它们还有助于更轻松地定义各种机器上的工具位置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使 Maven Javadoc 插件适用于任何 Java 版本 的相关文章

随机推荐

  • 在 Windows 批处理文件的 FOR 循环中转义星号

    在 Windows 批处理文件中运行以下代码时 除了包含星号的字符串 被跳过 之外 所有内容都正常运行 按编号检查传递的参数 即echo 6 我可以看到星号 只有当传递到 FOR 循环时我才会遇到问题 echo off setlocal e
  • 如何自定义生成的 javadoc 存根?

    在 Netbeans 中 当您键入 在上面的方法中 它生成一个 javadoc 存根 param return 如何自定义生成的文本 我想要一个自定义 javadoc 存根 例如 Author author My custom text p
  • 如何使用 C# 连接到 Google Cloud SQL Server?

    我刚刚在 Google Cloud Platform 上设置了一个 SQL Server 我在那里创建了一个数据库和表 我使用微软的 SQL Server Management Studio SSMS 来连接并创建数据库和表 这一切都奏效了
  • 具有列名的多个列的最大值?

    我已经探索了许多关于如何从多个列中返回最大值以及列名的问题和答案 但我还没有解决问题 在这个问题中将解释 SQL MAX 多列 https stackoverflow com questions 71022 sql max of multi
  • 在 R 文本清理中删除标点符号但保留连字符短语

    有没有有效的方法可以删除文本中的标点符号 但保留连字符的表达方式 例如 容易发生事故 我使用以下函数来清理我的文本 clean text function x remove rt x gsub rt x remove at x gsub w
  • 网站上的弹出窗口每个会话加载一次[重复]

    这个问题在这里已经有答案了 我找到了一些制作 javascript jquery 弹出窗口的方法 但是 也存在一些问题 首先 我对这两种语言不是很好 只是初学者 如果有任何现成的代码 用于在网站加载时打开 POPUP 窗口 但每个浏览器会话
  • 如何强制 Linq to SQL 不使用缓存?

    当我两次进行相同的查询时 第二次它不会从数据库返回新行 我猜它只是使用缓存 这是一个 Windows 窗体应用程序 我在应用程序启动时在其中创建 dataContext 如何强制 Linq to SQL 不使用缓存 这是我遇到问题的示例函数
  • 如何在页面加载时激活 JS 数据过滤器?

    我正在这个网站上工作http fireworkslove com http fireworkslove com 我制作了具有不同类别 推荐 新闻等 的导航 我想在页面打开时显示 推荐 类别 data filter recommended 现
  • Erlang - 未定义的函数

    我正在尝试执行一个非常简单的 Erlang 代码 但它不起作用 我尝试过毫无问题地执行一些 hello worlds 但不是我自己的代码 module server Exported Functions export start 0 pro
  • 将组件的首选尺寸保留在 BorderLayout 的中心

    我有一个使用 BorderLayout 的中型 UI 中心是一个选项卡式窗格 包含具有各种布局的各种面板等 我希望该边框布局中心的面板根据以下尺寸调整大小 窗口 但我不希望面板内的组件拉伸 标签 组合框 文本字段 按钮 我希望它们保持首选大
  • 什么时候可以使用 Java 中的浮点类型进行货币计算?

    我了解到我不能使用浮点类型 float double在Java中 进行金钱计算 以及当我需要精确结果时的任何其他计算 我必须使用decimal数字类型 BigDecimal在 Java 中 代替 现在我想知道当我can使用浮点类型 他们提供
  • 使用 Convert.ToDouble 时出现异常

    我正在制作一个库存程序 要求用户输入他们想要购买的不同数量的不同物品 我使用此行将项目数转换为双精度数 以便我可以计算 但出现错误 指出我有未处理的格式异常 输入字符串的格式不正确 我有什么遗漏的吗 itembatteries Conver
  • Python Pandas 使用新的 x 轴进行插值

    我想对以下结构的 Pandas 系列进行插值 X 22 88 3 047 45 75 3 215 68 63 3 328 91 50 3 423 114 38 3 516 137 25 3 578 163 40 3 676 196 08 3
  • Jquery - 模拟点击按钮不触发功能

    Ok 所以我一直在使用 firebug 以及我编写的一些扩展来在我经常使用的网站上创建快捷方式 有件事我不明白为什么它不起作用或为什么它不可能 示例代码
  • 如何删除 mouseleave 上的下一个追加?

    我的代码有问题 当我mouseenter一个元素 一个工具栏被附加到这个元素上 但是当我mouseleave从工具栏到元素 工具栏会再次附加 我怎样才能防止这种重新附加 el on mouseenter function e var too
  • Android Studio 创建密钥库错误

    我想通过 Android Studio 生成签名的 APK 这是我的第一个应用程序 所以我需要创建新的密钥库 但是 当我填写文本框并单击 确定 时 出现错误 消息如下 密钥库已导出 但显示错误让我不敢使用它 创建密钥时出现错误 选择 JAV
  • R - 箱线图中的排序

    我正在尝试制作一系列箱形图R由 2 个因素分组 我已经成功地绘制了图 但我无法将盒子按正确的方向排序 我正在使用的数据场如下所示 Nitrogen Species Treatment 2 G L 3 R M 4 G H 4 B L 2 B
  • 更改/设置 gcloud 操作系统登录用户名?

    这么简单的问题 我正在向我的计算引擎添加一个新帐户 我添加了用户和角色以及所有有趣的东西 现在我想添加 ssh 密钥 我通过运行来执行此操作gcloud compute os login ssh keys add key file 这工作正
  • 如何让 Jest 静默测试抛出的错误

    我正在编写一个测试来断言如果提供了一个 prop 而没有提供另一个 prop 则组件会抛出错误 测试本身通过了 但控制台仍然抱怨未捕获的错误并打印整个堆栈跟踪 有没有办法让 Jest 停止打印此信息 因为它会污染测试运行程序并使其看起来像是
  • 如何使 Maven Javadoc 插件适用于任何 Java 版本

    我正在使用 Maven Javadoc 插件 如下所示