本文来自网易云社区

作者:王飞

一、前言

一切问题的起源就是来自一个问题“为什么我打的jar包没有注解?”,带着这个疑问查了一圈资料,原来问题主要是在没有将源码中的注释进行抽取打包,自然我们在引用jar包的时候,无法获得注解。

二、让maven发布带上注解

这个方法很简单,只需在build->plugins下面中增加javadoc的插件来打包资源包,这样打包的时候就会额外增加一个以javadoc结尾的jar包。javadoc的组件添加源码如下:

<!--配置生成Javadoc包--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-javadoc-plugin</artifactId><version>2.10.4</version><configuration><encoding>UTF-8</encoding><aggregate>true</aggregate><charset>UTF-8</charset><docencoding>UTF-8</docencoding></configuration><executions><execution><id>attach-javadocs</id><goals><goal>jar</goal></goals></execution></executions></plugin>

三、什么是javadoc

javadoc居然可以解决jar包中代码注释的问题,那么什么是javadoc呢? 百度百科中的解释是:javadoc是Sun公司提供的一个技术,它从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档。也就是说,只要在编写程序时以一套特定的标签作注释,在程序编写完成后,通过Javadoc就可以同时形成程序的开发文档了。 javadoc的注解方式是有一定格式的,常用的注解方式有

标签 说明 JDK 1.1 doclet 标准doclet 标签类型
@author 作者 作者标识 包、 类、接口
@version 版本号 版本号 包、 类、接口
@param 参数名 描述 方法的入参名及描述信息,如入参有特别要求,可在此注释。 构造函数、 方法
@return 描述 对函数返回值的注释 方法
@deprecated 过期文本 标识随着程序版本的提升,当前API已经过期,仅为了保证兼容性依然存在,以此告之开发者不应再用这个API。 包、类、接口、值域、构造函数、 方法
@throws异常类名 构造函数或方法所会抛出的异常。 构造函数、 方法
@exception 异常类名 同@throws。 构造函数、 方法
@see 引用 查看相关内容,如类、方法、变量等。 包、类、接口、值域、构造函数、 方法
@since 描述文本 API在什么程序的什么版本后开发支持。 包、类、接口、值域、构造函数、 方法
{@link包.类#成员 标签} 链接到某个特定的成员对应的文档中。 包、类、接口、值域、构造函数、 方法
{@value} 当对常量进行注释时,如果想将其值包含在文档中,则通过该标签来引用常量的值。 √(JDK1.4) 静态值域

此外还有@serial、@serialField、@serialData、{@docRoot}、{@inheritDoc}、{@literal}、{@code} {@value arg}几个不常用的标签,由于不常使用,我们不展开叙述,感兴趣的读者可以查看帮助文档。

注释非常重要,不能随意增加或者修改成其他内容,否则会只是报错,打包不通过。如果一个类或者方法前增加了注解,且方法中存如param,return 或者throws时,注解中不添加的话也是会抛出警告的。所以注解要加的清晰易懂且符合规范。更多的关于javadoc的注解使用,可以通过参考资料查看其它更丰富的内容。

虽然javadoc能解决大部分的代码注释问题,但像是在代码方法中的注解呢?这个要是也想分享出来,靠javadoc就比较困难了。

四、引出的另外一个问题,如何让别人可以通过maven获取的源码

伴随着注释打包发布的更高需求的打包就是将源码一同打包。那么如何在maven仓库发布的时候,可以将自己的源码发出去呢?这个就需要我们maven的另一个插件了——sources。 和javadoc一样,只需在build->plugins下面中增加sources的插件来打包资源包,这样打包的时候就会额外增加一个以sources结尾的jar包。sources的组件添加源码如下:

<!--配置生成源码包--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>3.0.1</version><executions><execution><id>attach-sources</id><goals><goal>jar</goal></goals></execution></executions></plugin>

将源码也打包发布后,对方在调用我们jar报的时候,可以通过IDEA可以手动加载源码,查看更多的代码内容,而不是只能通过反编译的代码去看,没有任何的注解,要是代码质量不是太高的话,对方是很难理清头绪的。

五、最终效果

打包完成后的样子

maven仓库中的样子

IDEA中的样子

参考资料

  1. Maven打包生成源码包和Javadoc包

  2. maven 打包之后为什么 class 文件中没有注释了?

  3. 百度百科javadoc

  4. maven下载源代码,解决中文注释为乱码的问题

  5. JavaDOC注释使用方法

网易云免费体验馆,0成本体验20+款云产品!

更多网易研发、产品、运营经验分享请访问网易云社区。

相关文章:
【推荐】 KOL运营之——如何与网文作者高效地约稿?
【推荐】 FUI-我离钢铁侠还差几步?
【推荐】 网站规划通识:原型图绘制的一些注意事项

为什么我打的jar包没有注解?相关推荐

  1. 给你的SpringBoot工程打的jar包瘦瘦身

    Spring boot默认方式打包由于打的是全量依赖包(也称为fat包),不但打包慢,体积大,传输也慢,今天教大家给spring boot瘦瘦身. 背景 现在微服务架构越来越流行,一个项目10多个基于 ...

  2. maven 打的jar包很小

    maven打的jar很小,才十几K,可以准确地怀疑我的jar没有打进来. 需要在pom中添加如下.注意,一定要添加.因为插件spring-boot-maven-plugin的意思是,repackage ...

  3. java注解的jar包_Java 注解 Annotation

    目录: 从 JDK5 开始,Java 增加了对元数据(MetaData)的支持,也就是 Annotation.Annotation 其实就是代码里面的特殊标记,这些标记可以在编译.类加载.运行时被读取 ...

  4. Spring boot项目打的jar包太大,如何让他瘦下来

    为什么会导致jar变大 SpringBoot 部署起来虽然简单,如果服务器部署在公司内网,速度还行,但是如果部署在公网(阿里云等云服务器上),部署起来实在头疼:编译出来的 Jar 包很大,如果工程引入 ...

  5. maven指定打的jar包的名字

    转载自随风yy的博客 条件是Maven3及以上版本 在pom文件中添加<finalName>标签,标签内填写想要生成的jar包名称: <build><finalName& ...

  6. eclipse打的jar包无法执行,报错could not find main class

    这几天做了个小程序,并用eclipse打成jar包打算在电脑上运行,结果双击打开jar时提示could not find main class等错误信息,居然提示没找到入口主函数,我了个去,然后就在网 ...

  7. spring3的JAR包与注解学习笔记

    2019独角兽企业重金招聘Python工程师标准>>> 一.spring包分析 org.springframework.aop- 3.0.0.RELEASE: 面向切面编程,提供AO ...

  8. 如何将自己打的jar包放到maven仓库中

    2019独角兽企业重金招聘Python工程师标准>>> 1,导入 mvn install:install-file -DgroupId=com.qsfs  -DartifactId= ...

  9. IDEA 打可执行jar包(maven项目)

    1. Ctrl+Shift+Alt+S  打开 Project Structure  2.选择要执行的文件,  依次选择 项目, 方法所在文件(必须有main方法), 保存 3.如果之前路径下曾经打过 ...

最新文章

  1. 【Win8启动后自动进入传统桌面设置】
  2. 洛谷 P4284 [SHOI2014]概率充电器 解题报告
  3. redisson用阿里云集群版redis的问题_redission 序列化问题追踪
  4. android shell用户界面,shell界面下安装和卸载Android应用程序(apk包)
  5. python中可选参数是什么意思_Python如何定义有可选参数的元类
  6. mysql 数据库定时备份 增量/全备份
  7. Linux基本目录结构
  8. 苏州为什么只能做二线中游?
  9. rust异步编程--理解并发/多线程/回调/异步/future/promise/async/await/tokio
  10. matlab gul介绍及串口通信实现,Matlab - GUl介绍及串口通信实现(转)
  11. UE4中FString转UTF8及UTF8转FString
  12. Sklearn fit , transform ,fit_transform
  13. 基于四阶累积量的MUSIC算法与MUSIC-like算法(DOA估计)
  14. 选择Spring集成好的Spring Cloud Zuul方便更快
  15. lanhelper1.83 注册
  16. MapStruct一个代码的装潢师
  17. 计算机桌面图标有哪两类,电脑桌面图标箭头,电脑桌面图标有两个箭头
  18. 程序设计天梯赛 L1-6 斯德哥尔摩火车上的题分数 15
  19. 阿里云账号怎么注册?
  20. python编辑器windows_【python】windows下好用的的python编辑器 pyScripter

热门文章

  1. 【技术】天洑数据建模实施案例集锦(2) - 燃料电池热管理快速评估
  2. UiPath识别教程
  3. 解析数字证书的两种方法—openssl命令和python pyopenssl模块
  4. docsify(二):新增生成字典/词库功能
  5. C语言中双精度浮点型什么意思
  6. 因酷教育系统环境配置教程
  7. Linux 隐藏驱动模块
  8. 学计算机英语要去拼六级吗,拼搏两个月 大学英语六级终于考到580分
  9. 64位计算机连接网络打印机驱动程序,为运行 64 位版本的打印机查找兼容的打印机Windows - Windows Server | Microsoft Docs...
  10. TimLiu-iOS