背景
编译hive的时候,使用的命令是mvn clean package -Pdist,hive-webchat总是编译报错,mvn命令中加上-e(即mvn clean package -Pdist -e)显示错误日志如下,同时看到错误日志中javadoc的寻找的路径是$JAVA_HOME/jre/bin/javadoc。
"Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:3.2.0:javadoc (default-cli) on project ContAnalysis: An error has occurred in Javadoc report generation: Unable to find javadoc command: The environment variable JAVA_HOME is not correctly set."
原因分析
mvn编译使用的是JDK8编译的,在JDK8中,javadoc的路径在$JAVA_HOME/bin/javadoc下,所以就存在找不到javadoc命令。
解决方案
在hive-webchat这个module下的pom.xml文件中,找到javadocplugin的地方,加入下面的语句
<javadocExecutable>/Library/Java/JavaVirtualMachines/jdk-12.0.2.jdk/Contents/Home/bin/javadoc</javadocExecutable>
完整的内容如下
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>${maven.javadoc.plugin.version}</version>
<executions>
<execution>
<id>resourcesdoc.xml</id>
<goals>
<goal>javadoc</goal>
</goals>
<phase>compile</phase>
<configuration>
<javadocExecutable>/Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home/bin/javadoc</javadocExecutable>
<encoding>${project.build.sourceEncoding}</encoding>
<verbose>true</verbose>
<show>public</show>
<doclet>com.sun.jersey.wadl.resourcedoc.ResourceDoclet</doclet>
<docletArtifacts>
<docletArtifact>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>wadl-resourcedoc-doclet</artifactId>
<version>${wadl-resourcedoc-doclet.version}</version>
</docletArtifact>
<!--
Also specify jersey and xerces as doclet artifacts as the ResourceDoclet
uses classes provided by them to generate the resourcedoc.
-->
<docletArtifact>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>${jersey.version}</version>
</docletArtifact>
<docletArtifact>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>${xerces.version}</version>
</docletArtifact>
</docletArtifacts>
<additionalparam>-output ${project.build.outputDirectory}/resourcedoc.xml</additionalparam>
</configuration>
</execution>
</executions>
</plugin>
</plugins>