用Go编写的本地文件服务器
本文来自网易云社区,转载务必请注明出处。
一、前言
一切问题的起源就是来自一个问题“为什么我打的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中的样子

参考资料
本文来自网易云社区 ,经作者王飞授权发布。
网易云免费体验馆,0成本体验20+款云产品!
更多网易研发、产品、运营经验分享请访问网易云社区。
相关文章:
【推荐】 Question|你所遇到的验证码问题可能都在这里了
【推荐】 即将到来的5G,我们该做些什么准备?
用Go编写的本地文件服务器的更多相关文章
- [Nodejs]十分钟快速编写简单静态文件服务器
学了几天Nodejs 后我又干上了前端的活.这次遇到的问题是,我想在不同的设备上方便的查看我编写的网页,很自然的就想到要是能在本地搭建一个简单的http服务器的话,那局域网内的所有设备都可以访问了,这 ...
- 22_Android中的本地音乐播放器和网络音乐播放器的编写,本地视频播放器和网络视频播放器,照相机案例,偷拍案例实现
1 编写以下案例: 当点击了"播放"之后,在手机上的/mnt/sdcard2/natural.mp3就会播放. 2 编写布局文件activity_main.xml <Line ...
- NODEJS 搭建本地文件服务器
npm install anywhere --g 然后再任意目录位置运行 anywhere 80 就可以开启服务器.
- Android移动客户端性能测试浅谈——电量
本文由作者张迎贞授权网易云社区发布. APP性能测试除了需要监控PCU.内存占用.流量等,还需要获取APP的电量数据,测试在可接受范围内,避免APP出现过度消耗电量的现象.手机有很多硬件模块:CPU, ...
- Dubbo本地存根
在远程调用服务提供者的实现之前,如果需要做一些参数验证.缓存.判断.小功能等等,满足要求再调用服务提供者的远程服务,则我们可以通过编写一个本地存根来实现这种功能. (1).在公共项目中或服务消费者项目 ...
- Vue+Vant+Vuex实现本地购物车功能
通常,我们做移动端商城的时候,通常会有购物车模块,那购物车模块有两种实现方式,一是储存在后台通过接口获取到购物车信息,二是存在用户手机本地,第一种方法只要调用接口获取比较简单,这里介绍的是第二种方法, ...
- python基础(1):第一个python程序的编写
1.第一个python编程 1.1 python的安装 1> https://www.python.org/ 进入python官网,选择目标版本进行download 2> 点击setup ...
- 病毒木马查杀实战第017篇:U盘病毒之专杀工具的编写
前言 经过前几次的讨论,我们对于这次的U盘病毒已经有了一定的了解,那么这次我们就依据病毒的行为特征,来编写针对于这次U盘病毒的专杀工具. 专杀工具功能说明 因为这次是一个U盘病毒,所以我打算把这次的专 ...
- 28个Unix/Linux的命令行神器_转
28个Unix/Linux的命令行神器 下面是Kristóf Kovács收集的28个Unix/Linux下的28个命令行下的工具,有一些是大家熟悉的,有一些是非常有用的,有一些是不为人知的.这些工具 ...
随机推荐
- 剑指 Offer
3.1 找出数组中重复的数 来源:AcWing 题目描述 给定一个长度为 n 的整数数组 nums,数组中所有的数字都在 0∼n−1 的范围内. 数组中某些数字是重复的,但不知道有几个数字重复了,也不 ...
- zTree树插件动态加载
需求: 由于项目中家谱图数据量超大,而一般加载方式是通过,页面加载时 zTree.init方法进行数据加载,将所有数据一次性加载到页面中.而在项目中家谱级别又非常广而深,成千上万级,因此一次加载,完全 ...
- 開玩樹莓派(二):配置IP,實現無顯示器局域網內Putty連接和RDP遠程
目錄: 開玩樹莓派(一):安裝Raspbian系統 開玩樹莓派(二):配置IP,實現無顯示器局域網內Putty連接和RDP遠程 開玩樹莓派(三):Python編程 開玩樹莓派(四):GPIO控制和遠程 ...
- LINQ查询返回DataTable类型[轉]與将DataTable序列化为Json格式【轉】
(原文地址:http://xuzhihong1987.blog.163.com/blog/static/26731587201101853740294/) LINQ查询返回DataTable类型 在使 ...
- LogBack日志小记
优势 看了一下Logback的官方文档,说换成LogBack的原因大概有一下几个: 1. 说是logBack的设计开发和log4j是同一批人员,重写了内核,习惯上总体跟log4j一样,不会有太多生疏感 ...
- iOS 画圆图片的几种方法
方法一: self.cycleImv= [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 50, 50)]; [self.view addS ...
- GoAccess参数选项
GoAccess - 1.2 Usage: goaccess [filename] [ options ... ] [-c][-M][-H][-q][-d][...]The following opt ...
- sqlserver数据库备份方法
须事先准备一个工具curl,把它放在c盘.然后,在数据库所在服务器安装7z.最后把这2个存储过程执行,在sqlserver的代理中新建作业,即可实现备份操作. --备份指定数据库到本地和远程指定位置( ...
- 洛谷 P2347 砝码称重 != codevs 2144
题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入输出格式 输入格式: 输入方式:a1 a2 a3 a4 a5 a6 (表示1g砝码有a1个,2g砝 ...
- linux_1
注: 创建软连接: "ln -s xxx 路径1" 在路径1创建xxx的软连接 特点: 1.文件类型 l 2.相当于windows的快捷方式 创建硬链接: "ln xxx ...