首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >maven:java8下当javadoc有编译错误时无法生成.jar包的问题

maven:java8下当javadoc有编译错误时无法生成.jar包的问题

作者头像
10km
发布2019-05-25 20:33:19
1.5K0
发布2019-05-25 20:33:19
举报
文章被收录于专栏:10km的专栏10km的专栏

版权声明:本文为博主原创文章,转载请注明源地址。 https://cloud.tencent.com/developer/article/1433433

之前一直在java 7下编译maven项目,遇到javadoc编译提示代码注释中有错误(比如连接无效),也能正常生成javadoc jar包。但最近将编译器换成java 8后,同样的命令执行,遇到javadoc编译错误,maven就中止执行,生成jar包失败了。

在stackoverflow上找到这篇文章,才搞明白原因:《Maven is not working in Java 8 when Javadoc tags are incomplete》

原来是java 8的DocLint新特性造成的:

java 8中javadoc提供了一个新特性,允许程序能检测到java 代码注释中的错误(之前的版本,javadoc调用方无法检测到代码注释中的错误),默认情况下这个特性是打开的,所以maven执行编译javadoc编译时遇到代码注释中有错误,就会抛出异常,并中止执行。

最简单的解决办法:升级maven-javadoc-plugin插件版本到3.0.0以上,并添加<doclint>none</doclint>参数禁用该特性

示例如下

<plugins>
	<plugin>
		<!--引入javadoc插件 -->
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-javadoc-plugin</artifactId>
		<version>3.0.1</version>
		<configuration>
			<show>package</show>
			<!-- 禁用java 8 的DocLint新特性,以确保当javadoc有编译错误时,也能正常生成javadoc jar包-->
			<doclint>none</doclint>
		</configuration>
	</plugin>
</plugins>

但实际测试发现,采用这种方式执行mvn javadoc:jar确实是有效的但在执mvn release:prepare做发布版本准备时,却没有生成javadoc jar 包,使用<additionalparam>-Xdoclint:none</additionalparam>代替doclint参数才算正常:

<plugins>
	<plugin>
		<!--引入javadoc插件 -->
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-javadoc-plugin</artifactId>
		<version>3.0.1</version>
		<configuration>
			<show>package</show>
			<!-- 禁用java 8 的DocLint新特性,以确保当javadoc有编译错误时,也能正常生成javadoc jar包-->
			<additionalparam>-Xdoclint:none</additionalparam>
		</configuration>
	</plugin>
</plugins>

改成这样后,在java 8下执行mvn release:prepare是正常了,但在java 7下会报错误:不支持的选项-Xdoclint:none。所以如果希望在java 7,java 8下都能正常执行release,需要使用profile来区分JDK版本。删除前面在build/plugins中添加的javadoc插件,改为在pom.xml中添加profiles,如下:

</project>
	....
	<profiles>		
		<profile>
			<id>doclint-java8-disable</id>
			<!-- 指定profile只在JDK版本大于等于1.8时有效-->
			<activation>
				<jdk>[1.8,)</jdk>
			</activation>

			<build>
				<pluginManagement>
					<plugins>
						<!--引入javadoc插件 -->
						<plugin>
							<groupId>org.apache.maven.plugins</groupId>
							<artifactId>maven-javadoc-plugin</artifactId>
							<version>2.9</version>
							<configuration>
								<!-- 禁用java 8 的DocLint新特性,以确保当javadoc有编译错误时,也能正常生成javadoc jar包-->
								<additionalparam>-Xdoclint:none</additionalparam>
							</configuration>
						</plugin>
					</plugins>
				</pluginManagement>
			</build>
		</profile>
	</profiles>
</project>

参考资料

Maven is not working in Java 8 when Javadoc tags are incomplete

maven javadoc-mojo

java 8 doclint

DocLint is a new feature in Java 8

How to ignore Maven build erros due to JavaDoc with Java 8

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年01月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档