【问题标题】:Unable to find javadoc command - maven找不到 javadoc 命令 - maven
【发布时间】:2012-12-07 08:24:04
【问题描述】:

我在我的项目目录中运行了这个命令来构建和打包它:

mvn clean javadoc:jar package

我的JAVA_HOME 变量设置正确。 显然:

$ which java
/usr/bin/java
$ sudo ls -l /usr/bin/java
lrwxr-xr-x  1 root  wheel  74 Dec 18 23:42 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

$ which javadoc
/usr/bin/javadoc

有谁知道为什么 mvn 还在抱怨吗?

Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.8:jar (default-cli) on project foo_bar: MavenReportException: Error while creating archive: Unable to find javadoc command: The environment variable JAVA_HOME is not correctly set. -> [Help 1]

【问题讨论】:

  • 用 mvn -v 得到什么
  • echo $JAVA_HOME 说什么?
  • java 指向的位置请查看我的更新帖子。)
  • 您更新的帖子基于错误的假设。正确设置 JAVA_HOME,然后尝试。

标签: macos maven javadoc


【解决方案1】:

正确的which java 是不够的证据,因为无论如何/usr/bin/ 很可能在您的PATH 中。检查

$ echo $JAVA_HOME

为了证据。或者运行

$ JAVA_HOME=/path/to/your/java/home mvn clean javadoc:jar package

在 OS X 上,您可以通过以下方式设置 JAVA_HOME

$ export JAVA_HOME=$(/usr/libexec/java_home)

在我的机器上指向

/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

【讨论】:

  • 我认为我本身没有 java-home 包。这是在 Mac 上,当我在 \usr\bin\java 上执行 ls -l(即正在运行的 java)时,我看到 java 链接到此:/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java,这是一个单一的可执行文件!跨度>
  • 路径中是否有 java 并不重要...为了使用 JDK 工具,您需要将 JAVA_HOME 设置为 JDK。让 /usr/bin/java 本身指向 /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java 它并不甚至意味着您安装了 JDK...也许你只有一个 JRE(不包括 javadoc)
  • 注意:不要在导出中包含 $()。 IE。 export JAVA_HOME=/System/Library/Java/...
  • 当通过图形 IDE(例如 IntelliJ)调用 Maven 时,您可以通过在 /etc/launchd.conf 中设置 JAVA_HOME 来缓解此问题,如下所示:setenv JAVA_HOME /Library/Java/Home。然后运行 ​​sudo grep -E "^setenv" /etc/launchd.conf | xargs -t -L 1 launchctl 并重新启动受影响的 GUI 程序。
  • 在我的 Ubuntu 上安装 JVM 路径是 /usr/lib/jvm/java-8-openjdk-amd64/
【解决方案2】:

你可以让它使用 java.home 系统属性而不是 JAVA_HOME 环境变量:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>3.0.1</version>
    <configuration>
        <javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
    </configuration>
</plugin>

创意来源:https://medium.com/@kankvish/fixing-issue-the-environment-variable-java-home-is-not-correctly-set-b5f0b66a84d0

【讨论】:

  • 在最新版本的 maven-javadoc-plugin 中有一个愚蠢的错误,除非设置 JAVA_HOME,否则它会失败,尽管 javadoc 在命令行上运行。显然开发人员不使用 Mac,因为 Mac Java 安装没有设置 JAVA_HOME。这似乎可以解决问题。
  • 错误报告是here。请投票。 (不确定会有什么效果,但值得一试。)
  • @ccleve 我在 Ubuntu 18.10 中遇到了同样的问题,但是这个解决了它!!
  • 这可能会解决某些 JDK 版本的问题,但不能解决所有问题。如果 javadoc 是在多个环境中构建的(例如,在本地使用 JDK 8 和在某些构建管道中,例如使用 JDK 11 的 GitHub 操作),它将不起作用。在这种情况下,最好使用 maven 配置文件,请参阅this stackoverflow post
【解决方案3】:

您可以在eclipse中添加JAVA_HOME作为环境变量。

转到您的 maven 构建-> 添加以下内容。

点击新建->

名称:JAVA_HOME

价值:你的路径。

这对我有用!

【讨论】:

    【解决方案4】:

    虽然很多答案都在谈论 OS X,但对于 Debian 或类似 Debian 的系统(例如 Ubuntu),我决定滥用“替代”系统:

    export JAVA_HOME=$(update-alternatives --query javadoc | grep Value: | head -n1 | sed 's/Value: //' | sed 's@bin/javadoc$@@')
    

    使用awk 更干净地重写它,或者使用更正确的方式访问“替代”数据库中的值,留给读者作为练习。

    另外,鉴于在这种情况下使用“替代”系统的目的是维护符号链接,例如/usr/bin/javadoc,我们可以只查询符号链接指向的路径:

    export JAVA_HOME=$(realpath /usr/bin/javadoc | sed 's@bin/javadoc$@@')
    

    虽然这不是唯一可能的“Java 主页”(您可能安装了许多 JDK),但鉴于我只关心将 mvn 构建向前移动,并且错误涉及 Javadoc,我选择参考这是包含javadoc 二进制文件的目录。


    除了 JRE 之外,别忘了安装 JDK。例如,我需要的 JDK 是 openjdk-11-jdk,以补充我之前安装的 JRE openjdk-11-jre


    在上面之后,JAVA_HOME envvar 在我的系统上有这个值:/usr/lib/jvm/java-11-openjdk-amd64/

    【讨论】:

      【解决方案5】:

      花了 2-3 个小时后,我觉得通过命令行打开 Eclipse 看起来是最简单的解决方案。 请按照以下步骤操作,

      cd <Folder_where_Eclipse.app> open Eclipse.app

      现在你的eclipse可以找到终端环境变量了。

      【讨论】:

      • 谢谢。这行得通。我没有时间,这项工作效果很好。我确信其他 cmets 也一样好,但对于快速解决方法来说,这很棒。
      【解决方案6】:

      有 2 个选项可以解决此问题。步骤如下:

      1. 确保将 JAVA_HOME 配置为环境变量。

      2. 选项 1:javadocExecutable 添加到属性中。

        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>${project.build.sourceEncoding
            </project.reporting.outputEncoding>
            <java.version>11</java.version>
            <javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
        </properties>
        
      3. 选项 2:javadocExecutable 添加到构建部分,如下所示。

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>${maven-javadoc-plugin.version}</version>
            <executions>
                <execution>
                    <id>attach-javadocs</id>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                    <configuration>
                        <additionalparam>-Xdoclint:none</additionalparam>
                    </configuration>
                </execution>
            </executions>
            <configuration>
                <javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
                <excludePackageNames>com.vu.poc.test.objects</excludePackageNames>
                <overview />
            </configuration>
        </plugin>
        

      【讨论】:

        【解决方案7】:

        将 maven-javadoc-plugin 插件升级到最新版本(3.3.0 或更高版本)。

        【讨论】:

          【解决方案8】:

          他们通过将“export JAVA_HOME”添加到“bin/mvn”shell 脚本中为 maven 3.1 中的 OSX 修复了此问题,无需自己在外部设置 JAVA_HOME 来查找 javadoc。

          【讨论】:

          • export JAVA_HOME=$(/usr/libexec/java_home -v 1.8) 使用 MVN 3.5.2 这对我有用。我也必须把它放在 mvnyjp 和 mvnDebug 中。
          【解决方案9】:

          一旦我切换到使用 sdkman 并删除了 Ubuntu 的 java 包,我就开始面临这个问题。其他一切正常,但使用 IntelliJ IDEA 捆绑的 maven 时 javadoc 插件失败。值得庆幸的是,我们可以在每个项目级别设置环境变量

          构建、执行、部署 > 构建工具 > Maven > Runner

          环境变量:文本框中,添加

          JAVA_HOME=/home/user/.sdkman/candidates/java/11.0.12-open/
          

          【讨论】:

            猜你喜欢
            • 2022-06-15
            • 1970-01-01
            • 2018-11-22
            • 1970-01-01
            • 2011-11-16
            • 1970-01-01
            • 2016-09-23
            • 2019-12-27
            • 2021-02-10
            相关资源
            最近更新 更多