当Javadoc标签不完整时,Maven不能在Java 8中工作

由于我使用Maven,我已经能够构build和安装在我的本地存储库项目,具有不完整的Javadoc标签(例如,一个缺less的参数)。

然而,自从我迁移到Java 8(1.8.0-ea-b90)以来,Maven对于缺失的文档标签是绝对严格的,并且在尝试构build或安装Javadoc不是Javadoc的项目时,显示出大量有关Javadoc问题的Javadoc错误“完善”。 我试图编译并安装在本地存储库中的一些项目是我无法控制的第三方项目。 所以,在所有这些项目中修复所有Javadoc的解决方法在我的场景中似乎不是可行的。

这是我在我的项目中执行mvn clean package install时输出的一小部分:

 [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 9.026s [INFO] Finished at: Mon Apr 08 21:06:17 CEST 2013 [INFO] Final Memory: 27M/437M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.9:jar (attach-javadocs) on project jpc: MavenReportException: Error while creating archive: [ERROR] Exit code: 1 - /Users/sergioc/Documents/workspaces/heal/jpc/src/main/java/org/jpc/engine/prolog/PrologDatabase.java:10: error: @param name not found [ERROR] * @param terms the terms to assert [ERROR] ^ [ERROR] /Users/sergioc/Documents/workspaces/heal/jpc/src/main/java/org/jpc/engine/prolog/PrologDatabase.java:11: warning: no description for @return [ERROR] * @return [ERROR] ^ 

Javadoc Maven插件在我的POM中是这样configuration的:

 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.9</version> <executions> <execution> <id>attach-javadocs</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> 

正如我之前所说,如果我回到Java 7,一切正常。也许这是一个与在Java 8中运行的Maven相关的错误? 我怎么能用Java 8使它工作(即能够构build项目的Javadoc并将其代码安装在本地存储库中)? 我已经在OSX中同时testing了Maven 3.0.3和3.0.5。

更新:

如果我用<failOnError>false</failOnError>更改我的Javadoc插件configuration(感谢Martin):

 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.9</version> <executions> <execution> <id>attach-javadocs</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> 

然后该项目安装在我的本地存储库。 但是,Javadoc JAR仍然没有生成。

我看到在这个新的configuration控制台输出的片段是:

[错误] MavenReportException:创build归档时出错:退出代码:1 – /Users/….java:18:warning:no @param …命令行是:/ Library / Java / Home / bin / javadoc @options @packages

参考'/ Users / sergioc / Documents / workspaces / heal / minitoolbox / target / apidocs'目录下生成的Javadoc文件。

在org.apache.maven.plugin处的org.apache.maven.plugin.javadoc.AbstractJavadocMojo.executeReport(AbstractJavadocMojo.java:1990)上的org.apache.maven.plugin.javadoc.AbstractJavadocMojo.executeJavadocCommandLine(AbstractJavadocMojo.java:5043) .javadoc.JavadocJar.execute(JavadocJar.java:181)at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java :209)org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)at org.apache。 maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)在org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)上的org.apache.maven.lifecycle.internal.LifecycleStarter。在org.apache.maven.lifecycle.internal.Lifecyc的singleThreadedBuild(LifecycleStarter.java:183) lestarter.execute(LifecycleStarter.java:161)在org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)在org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)在org.apache.maven .cli.MavenCli.execute(MavenCli.java:537)at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)at org.apache.maven.cli.MavenCli.main(MavenCli.java:141 )at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect。在org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java: 230)at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)

有关如何构build源代码的任何解决方法,安装项目并在Java 7中一步生成Javadoc JAR?

最好的解决办法是修复javadoc错误。 如果由于某些原因,这是不可能的(即:自动生成的源代码),那么你可以禁用此检查。

DocLint是Java 8中的一项新function,概述如下:

提供一种方法来在开发周期早期检测Javadoc评论中的错误,并以一种轻松链接到源代码的方式。

这是默认启用的,并且会在生成Javadoc之前运行一大堆检查。 您需要按照此线程中的说明closuresJava 8。 你将不得不添加到你的mavenconfiguration:

 <profiles> <profile> <id>java8-doclint-disabled</id> <activation> <jdk>[1.8,)</jdk> </activation> <properties> <javadoc.opts>-Xdoclint:none</javadoc.opts> </properties> </profile> </profiles> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.9</version> <executions> <execution> <id>attach-javadocs</id> <goals> <goal>jar</goal> </goals> <configuration> <additionalparam>${javadoc.opts}</additionalparam> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-site-plugin</artifactId> <version>3.3</version> <configuration> <reportPlugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <configuration> <additionalparam>${javadoc.opts}</additionalparam> </configuration> </plugin> </reportPlugins> </configuration> </plugin> </plugins> </build> 

使用java 8和java 7工作的最简单方法是在构build中使用configuration文件:

 <profiles> <profile> <id>doclint-java8-disable</id> <activation> <jdk>[1.8,)</jdk> </activation> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <configuration> <additionalparam>-Xdoclint:none</additionalparam> </configuration> </plugin> </plugins> </build> </profile> </profiles> 

这里是我知道忽略doclint警告最简洁的方式,无论使用的Java版本。 稍微修改就不需要在多个configuration文件中重复插件configuration。

 <profiles> <profile> <id>doclint-java8-disable</id> <activation> <jdk>[1.8,)</jdk> </activation> <properties> <javadoc.opts>-Xdoclint:none</javadoc.opts> </properties> </profile> </profiles> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.9.1</version> <executions> <execution> <id>attach-javadocs</id> <!-- The actual id should be apparent from maven output --> <configuration> <additionalparam>${javadoc.opts}</additionalparam> </configuration> </execution> </executions> </plugin> ... </plugins> </build> 

在oracle / open jdk 6,7和8上testing。

添加到pom文件的全局属性部分:

 <project> ... <properties> <additionalparam>-Xdoclint:none</additionalparam> </properties> 

在其他答案中提供的常见解决scheme(在插件部分中添加属性)由于某些原因而不起作用。 只有通过全局设置,才能成功构buildjavadoc jar。

仅覆盖maven-javadoc-pluginconfiguration,并不能解决mvn site的问题(例如在发布阶段使用)。 这是我必须做的:

 <profile> <id>doclint-java8-disable</id> <activation> <jdk>[1.8,)</jdk> </activation> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <configuration> <additionalparam>-Xdoclint:none</additionalparam> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-site-plugin</artifactId> <version>3.3</version> <configuration> <reportPlugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <configuration> <additionalparam>-Xdoclint:none</additionalparam> </configuration> </plugin> </reportPlugins> </configuration> </plugin> </plugins> </build> </profile> 

我不认为只是closuresDocLint是一个很好的解决scheme,至less不是长期的。 Javadoc已经变得更加严格了,所以解决构build问题的正确方法是解决底层的问题 。 是的,您最终需要修复这些源代码文件。

以下是您可以放弃的事情:

  • 格式错误的HTML(例如缺less结束标记,未转义的括号等)
  • 无效{@link } 。 (同样的标签,如@see
  • @author值无效。 这曾被接受: @author John <john.doe@mine.com>但不是如此,因为未转义的括号。
  • Javadoc中的HTML表格现在需要一个摘要或标题。 看到这个问题的解释。

你只需要修复你的源代码文件,并继续构build你的Javadoc,直到它可以build立没有失败。 麻烦的是,但我个人喜欢把我的项目提高到DocLint的水平,因为这意味着我可以更有信心,我生产的Javadoc实际上是我的意图。

当然,如果你正在生成一些你自己还没有生成的源代码的Javadoc,当然也有问题,例如,因为它来自一些代码生成器,例如wsimport 。 奇怪的是,在实际发布JDK8之前,Oracle没有准备好自己的JDK8兼容工具。 Java 9之前似乎不会被修复 。 只有在这种特殊情况下,我build议closuresDocLint,如本页其他地方所述。

可用于任何Java版本的最短解决scheme:

 <profiles> <profile> <id>disable-java8-doclint</id> <activation> <jdk>[1.8,)</jdk> </activation> <properties> <additionalparam>-Xdoclint:none</additionalparam> </properties> </profile> </profiles> 

只要把它添加到你的POM中,你就可以走了。

这基本上是@ ankon的回答加@ zapp 的答案 。

您可以尝试将failOnError属性(请参阅插件文档 )设置为false

 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.9</version> <executions> <execution> <id>attach-javadocs</id> <goals> <goal>jar</goal> </goals> <configuration> <failOnError>false</failOnError> </configuration> </execution> </executions> </plugin> 

从文档中可以看到,默认值为true

因为它取决于你用来运行maven命令的JRE版本,所以你不想在你的pom.xml中默认禁用DocLint

因此,从命令行你可以使用开关-Dadditionalparam=-Xdoclint:none

例如: mvn clean install -Dadditionalparam=-Xdoclint:none

我不知道这是否会有所帮助,但是即使我最近用oozie-4.2.0版本也遇到了同样的问题。 通过阅读上述答案后,我刚刚通过命令行添加了maven选项,它为我工作。 所以,在这里分享。

我正在使用java 1.8.0_77 ,还没有尝试过使用java 1.7

bin / mkdistro.sh -DskipTests -Dmaven.javadoc.opts =' – Xdoclint:-html'

我想补充一些其他答案的见解

在我的情况

-Xdoclint:无

没有工作。

首先,在我的项目中,我根本不需要javadoc。 只有一些必要的插件获得了构build时间依赖性。

所以,解决我的问题最简单的方法是:

 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin>