Ser*_*gio 303 java migration javadoc maven java-8
由于我使用Maven,因此我能够在我的本地存储库项目中构建和安装具有不完整Javadoc标记的项目(例如,缺少参数).
但是,由于我迁移到Java 8(1.8.0-ea-b90),当我尝试构建或安装Javadoc不是Javadoc的项目时,Maven绝对严格缺少文档标记,并向我展示了许多与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] ^
Run Code Online (Sandbox Code Playgroud)
Javadoc Maven插件在我的POM中配置如下:
<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>
Run Code Online (Sandbox Code Playgroud)
正如我之前所说的,如果我回到Java 7,一切都运行良好.也许这是与Java 8中运行的Maven相关的错误?我如何使用Java 8使其工作(即,能够构建项目的Javadoc并在我的本地存储库中安装其代码)?我已经在OSX中使用Maven 3.0.3和3.0.5进行了测试.
更新:
如果我改变我的Javadoc插件配置<failOnError>false</failOnError>(感谢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>
Run Code Online (Sandbox Code Playgroud)
然后项目安装在我的本地存储库中.但是,仍然没有生成Javadoc JAR.
我在控制台中看到的具有这种新配置的输出片段是:
[错误] MavenReportException:创建存档时出错:退出代码:1 - /Users/....java:18:警告:没有@param ...命令行是:/ Library/Java/Home/bin/javadoc @options @packages
请参阅'/ Users/sergioc/Documents/workspaces/heal/minitoolbox/target/apidocs'目录中生成的Javadoc文件.
在org.apache.maven.plugin.javadoc.AbstractJavadocMojo.executeJavadocCommandLine(AbstractJavadocMojo.java:5043)在org.apache.maven.plugin.javadoc.AbstractJavadocMojo.executeReport(AbstractJavadocMojo.java:1990)在org.apache.maven.plugin .javadoc.JavadocJar.execute(JavadocJar.java:181)在org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java :209)在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)在org.apache. maven.lifecycle.internal.LifecycleModuleBuilder.buildProject在org.apache.maven.lifecycle.internal.LifecycleStarter(LifecycleModuleBuilder.java:84)在org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59). orT.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)org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)org.apache.maven.cli.MavenCli.main(MavenCli.java:141 )在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)在java.lang.reflect中.方法.invoke(Method.java:491)org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java: 230)atg.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
有关如何构建源代码,安装项目以及在使用Java 7时一步生成Javadoc JAR的任何解决方法?
Sub*_*has 379
最好的解决方案是修复javadoc错误.如果由于某种原因不可能(即:自动生成的源代码),则可以禁用此检查.
提供一种在开发周期早期以一种易于链接回源代码的方式检测Javadoc注释中的错误的方法.
默认情况下启用此选项,并在生成Javadoc之前运行大量检查.您需要按照此线程中的指定为Java 8关闭此功能.您必须将此添加到您的maven配置:
<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>
Run Code Online (Sandbox Code Playgroud)
对于maven-javadoc-plugin 3.0.x: 替换
<additionalparam>-Xdoclint:none</additionalparam>
Run Code Online (Sandbox Code Playgroud)
同
<doclint>none</doclint>
Run Code Online (Sandbox Code Playgroud)
ank*_*kon 96
使用java 8和java 7的最简单方法是在构建中使用配置文件:
<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>
Run Code Online (Sandbox Code Playgroud)
Oli*_*dža 64
这是我所知道的最简洁的方法,无论使用的是哪个版本,都会忽略doclint警告.无需在略有修改的情况下在多个配置文件中复制插件配置.
<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>
Run Code Online (Sandbox Code Playgroud)
在oracle/open jdk 6,7和8上测试过.
zap*_*app 38
添加到pom文件的全局属性部分:
<project>
...
<properties>
<additionalparam>-Xdoclint:none</additionalparam>
</properties>
Run Code Online (Sandbox Code Playgroud)
此处在其他答案中提供的常见解决方案(在插件部分中添加该属性)由于某种原因不起作用.只有通过全局设置我才能成功构建javadoc jar.
Fre*_*ula 36
<profiles>
<profile>
<id>disable-java8-doclint</id>
<activation>
<jdk>[1.8,)</jdk>
</activation>
<properties>
<additionalparam>-Xdoclint:none</additionalparam>
</properties>
</profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)
只需将它添加到您的POM中就可以了.
这基本上是@ ankon的答案加上@zapp 的答案.
更换
<additionalparam>-Xdoclint:none</additionalparam>
通过
<doclint>none</doclint>
小智 30
maven-javadoc-plugin仅覆盖配置,不能解决问题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>
Run Code Online (Sandbox Code Playgroud)
pet*_*erh 29
我不认为只关闭DocLint是一个很好的解决方案,至少不是长期的.Javadoc变得更加严格是好的,因此修复构建问题的正确方法是修复底层问题.是的,您最终需要修复这些源代码文件.
以下是您可以注意的事项:
{@link }s.(对于类似的标签也一样@see)@author值.这曾经被接受:@author John <john.doe@mine.com>但由于没有转义的括号,因此不再如此.您只需修复源代码文件并继续构建Javadoc,直到它可以构建而不会出现故障.很麻烦是的,但我个人喜欢当我将项目提升到DocLint级别时,因为这意味着我可以更自信我生产的Javadoc实际上是我想要的.
当然,如果你在一些你自己没有生成的源代码上生成Javadoc就会出现问题,例如因为它来自某些代码生成器,例如wsimport.奇怪的是,在实际发布JDK8之前,Oracle没有为JDK8合规性准备自己的工具.似乎在Java 9之前不会修复它.只有在这种特殊情况下,我建议关闭本页其他地方记录的DocLint.
Mar*_*lis 21
您可以尝试将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>
Run Code Online (Sandbox Code Playgroud)
从文档中可以看出,默认值为true.
My-*_*-Is 17
由于它取决于用于运行maven命令的JRE版本,因此您可能不希望DocLint在pom.xml中禁用每个默认值
因此,从命令行可以使用该开关-Dadditionalparam=-Xdoclint:none.
例: mvn clean install -Dadditionalparam=-Xdoclint:none
小智 9
配置属性名称已在最新版本的maven-javadoc-plugin 3.0.0中更改.
因此<additionalparam>将无效.所以我们必须修改如下.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<doclint>none</doclint>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
从 maven-javadoc-plugin 3.0.0 开始,您应该使用extraJOption来设置附加 Javadoc 选项,因此如果您希望 Javadoc 禁用 doclint,您应该添加以下属性。
<properties>
...
<additionalJOption>-Xdoclint:none</additionalJOption>
...
<properties>
Run Code Online (Sandbox Code Playgroud)
您还应该提及 maven-javadoc-plugin 的版本为 3.0.0 或更高版本。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0</version>
</plugin>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
155004 次 |
| 最近记录: |