文档章节

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

xiaomin0322
 xiaomin0322
发布于 07/10 10:07
字数 742
阅读 14
收藏 0

之前一直在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
--------------------- 
 

本文转载自:https://blog.csdn.net/10km/article/details/86429770

xiaomin0322
粉丝 146
博文 3918
码字总数 199288
作品 0
上海
架构师
私信 提问
为什么我打的jar包没有注解?

本文来自网易云社区 作者:王飞 一、前言 一切问题的起源就是来自一个问题“为什么我打的jar包没有注解?”,带着这个疑问查了一圈资料,原来问题主要是在没有将源码中的注释进行抽取打包,自...

网易云
2018/10/15
0
0
Github开源Java项目(IJPay)上传到Maven Central Repository 方法详细介绍

之前IJPay Jar是上传到JitPack,但是有很多同学反馈说Jar无法下载。为了响应群众的号召,这次需要向中央仓库提交jar, 我们可以利用Sonatype OSSRH把Jar等资源提交给Maven的中央仓库。 Sonaty...

Javen205
2017/09/02
0
0
DICOM:dcm4che开源项目导入Eclipse编译错误问题解决方案

版权声明:本文为zssure原创文章,转载请注明出处,未经允许不得转载。 https://blog.csdn.net/zssureqh/article/details/50443824 背景: 马上跨年了,记得小时候元旦都不是事儿,怎么长大了...

zssure
2015/12/31
0
0
maven 自定义打包

“打包“这个词听起来比较土,比较正式的说法应该是”构建项目软件包“,具体说就是将项目中的各种文件,比如源代码、编译生成的字节码、配置文件、文档,按照规范的格式生成归档,最常见的当...

Oscarfff
2016/09/08
99
0
Maven实战(九)——打包的技巧

“打包“这个词听起来比较土,比较正式的说法应该是”构建项目软件包“,具体说就是将项目中的各种文件,比如源代码、编译生成的字节码、配置文件、文档,按照规范的格式生成归档,最常见的当...

Oscarfff
2016/02/13
84
0

没有更多内容

加载失败,请刷新页面

加载更多

社区投稿 | 线程简介和 MySQL 调试环境搭建

作者:高鹏 文章末尾有他著作的《深入理解MySQL主从原理 32讲》,深入透彻理解MySQL主从,GTID相关技术知识。 本文节选自《深入理解MySQL主从原理》第29节 注意:本文分为正文和附件两部分,...

爱可生
31分钟前
6
0
DDOS攻击可以分为什么类型?怎么样才能解决?

DDoS 是一种多源网络攻击,其目的是针对终端用户扰乱其网络的资源或服务。其不断进化的复杂性能够造成各种各样的伤害,例如欺诈以及勒索等。DDoS 攻击通常透过多重受损的系统或者装置注入殭尸...

云漫网络Ruan
34分钟前
6
0
从零开始入门 K8s| 阿里技术专家详解 K8s 核心概念

作者| 阿里巴巴资深技术专家、CNCF 9个 TCO 之一 李响 一、什么是 Kubernetes Kubernetes,从官方网站上可以看到,它是一个工业级的容器编排平台。Kubernetes 这个单词是希腊语,它的中文翻译...

阿里巴巴云原生
34分钟前
4
0
修改和编译spring源码,构建jar(spring-context-4.0.2.RELEASE)

上周在定位问题时,发现Spring容器实例化Bean的时候抛出异常,为了查看更详细的信息,决定修改spring-context-4.0.2.RELEASE.jar中的CommonAnnotationBeanPostProcessor类的代码,在里面打印...

程序员欣宸
37分钟前
5
0
MongoDB集群配置

MongoDB集群配置 2019年06月30日 13:21:05 2014Team 阅读数 77更多 分类专栏: MongoDB 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文...

linjin200
37分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部