本文来自网易云社区,转载务必请注明出处。

一、前言

一切问题的起源就是来自一个问题“为什么我打的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+款云产品!

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

相关文章:
【推荐】 Question|你所遇到的验证码问题可能都在这里了
【推荐】 即将到来的5G,我们该做些什么准备?

用Go编写的本地文件服务器的更多相关文章

  1. [Nodejs]十分钟快速编写简单静态文件服务器

    学了几天Nodejs 后我又干上了前端的活.这次遇到的问题是,我想在不同的设备上方便的查看我编写的网页,很自然的就想到要是能在本地搭建一个简单的http服务器的话,那局域网内的所有设备都可以访问了,这 ...

  2. 22_Android中的本地音乐播放器和网络音乐播放器的编写,本地视频播放器和网络视频播放器,照相机案例,偷拍案例实现

    1 编写以下案例: 当点击了"播放"之后,在手机上的/mnt/sdcard2/natural.mp3就会播放. 2 编写布局文件activity_main.xml <Line ...

  3. NODEJS 搭建本地文件服务器

    npm install anywhere --g 然后再任意目录位置运行 anywhere 80 就可以开启服务器.

  4. Android移动客户端性能测试浅谈——电量

    本文由作者张迎贞授权网易云社区发布. APP性能测试除了需要监控PCU.内存占用.流量等,还需要获取APP的电量数据,测试在可接受范围内,避免APP出现过度消耗电量的现象.手机有很多硬件模块:CPU, ...

  5. Dubbo本地存根

    在远程调用服务提供者的实现之前,如果需要做一些参数验证.缓存.判断.小功能等等,满足要求再调用服务提供者的远程服务,则我们可以通过编写一个本地存根来实现这种功能. (1).在公共项目中或服务消费者项目 ...

  6. Vue+Vant+Vuex实现本地购物车功能

    通常,我们做移动端商城的时候,通常会有购物车模块,那购物车模块有两种实现方式,一是储存在后台通过接口获取到购物车信息,二是存在用户手机本地,第一种方法只要调用接口获取比较简单,这里介绍的是第二种方法, ...

  7. python基础(1):第一个python程序的编写

    1.第一个python编程 1.1 python的安装 1> https://www.python.org/  进入python官网,选择目标版本进行download 2> 点击setup ...

  8. 病毒木马查杀实战第017篇:U盘病毒之专杀工具的编写

    前言 经过前几次的讨论,我们对于这次的U盘病毒已经有了一定的了解,那么这次我们就依据病毒的行为特征,来编写针对于这次U盘病毒的专杀工具. 专杀工具功能说明 因为这次是一个U盘病毒,所以我打算把这次的专 ...

  9. 28个Unix/Linux的命令行神器_转

    28个Unix/Linux的命令行神器 下面是Kristóf Kovács收集的28个Unix/Linux下的28个命令行下的工具,有一些是大家熟悉的,有一些是非常有用的,有一些是不为人知的.这些工具 ...

随机推荐

  1. 剑指 Offer

    3.1 找出数组中重复的数 来源:AcWing 题目描述 给定一个长度为 n 的整数数组 nums,数组中所有的数字都在 0∼n−1 的范围内. 数组中某些数字是重复的,但不知道有几个数字重复了,也不 ...

  2. zTree树插件动态加载

    需求: 由于项目中家谱图数据量超大,而一般加载方式是通过,页面加载时 zTree.init方法进行数据加载,将所有数据一次性加载到页面中.而在项目中家谱级别又非常广而深,成千上万级,因此一次加载,完全 ...

  3. 開玩樹莓派(二):配置IP,實現無顯示器局域網內Putty連接和RDP遠程

    目錄: 開玩樹莓派(一):安裝Raspbian系統 開玩樹莓派(二):配置IP,實現無顯示器局域網內Putty連接和RDP遠程 開玩樹莓派(三):Python編程 開玩樹莓派(四):GPIO控制和遠程 ...

  4. LINQ查询返回DataTable类型[轉]與将DataTable序列化为Json格式【轉】

    (原文地址:http://xuzhihong1987.blog.163.com/blog/static/26731587201101853740294/) LINQ查询返回DataTable类型 在使 ...

  5. LogBack日志小记

    优势 看了一下Logback的官方文档,说换成LogBack的原因大概有一下几个: 1. 说是logBack的设计开发和log4j是同一批人员,重写了内核,习惯上总体跟log4j一样,不会有太多生疏感 ...

  6. iOS 画圆图片的几种方法

    方法一: self.cycleImv= [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 50, 50)]; [self.view addS ...

  7. GoAccess参数选项

    GoAccess - 1.2 Usage: goaccess [filename] [ options ... ] [-c][-M][-H][-q][-d][...]The following opt ...

  8. sqlserver数据库备份方法

    须事先准备一个工具curl,把它放在c盘.然后,在数据库所在服务器安装7z.最后把这2个存储过程执行,在sqlserver的代理中新建作业,即可实现备份操作. --备份指定数据库到本地和远程指定位置( ...

  9. 洛谷 P2347 砝码称重 != codevs 2144

    题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入输出格式 输入格式: 输入方式:a1 a2 a3 a4 a5 a6 (表示1g砝码有a1个,2g砝 ...

  10. linux_1

    注: 创建软连接: "ln -s xxx 路径1" 在路径1创建xxx的软连接 特点: 1.文件类型 l 2.相当于windows的快捷方式 创建硬链接: "ln xxx ...