我在项目目录中运行此命令来构建并打包它:
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]
正确的
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 系统属性而不是 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>
虽然很多答案都在谈论 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 home”(您可能安装了许多 JDK),但鉴于我只关心向前移动
mvn
构建,并且错误涉及 Javadoc,我选择将其称为包含 javadoc
二进制文件的目录。
除了 JRE 之外,不要忘记安装 JDK。例如,我需要的 JDK 是
openjdk-11-jdk
,以补充我之前安装的 JRE openjdk-11-jre
。
完成上述操作后,
JAVA_HOME
envvar 在我的系统上具有以下值:/usr/lib/jvm/java-11-openjdk-amd64/
有 2 个选项可以解决此问题。步骤如下:
确保将 JAVA_HOME 配置为环境变量。
选项 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>
选项 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>
花了 2-3 个小时的时间后,我觉得通过命令行打开 Eclipse 看起来是最简单的解决方案。 请按照以下步骤操作,
cd <Folder_where_Eclipse.app>
open Eclipse.app
现在你的eclipse可以找到终端环境变量了。
将 maven-javadoc-plugin 插件升级到最新版本(3.3.0 或更高版本)。
他们在 maven 3.1 中通过将“export JAVA_HOME”添加到“bin/mvn”shell 脚本中修复了 OSX 的问题,从而无需自己在外部设置 JAVA_HOME 来查找 javadoc。