目的

将java的代码注释转换为json格式,并写入文件

本文介绍了完整的开发流程及如何使用

运行环境

jdk1.8

maven3.x

设计思想

系统构思

  1. 编译完成的class里没有注释的,所以注释信息只有在编译代码时存储起来
  2. 将能够生成javadoc.json的代码做成maven插件

关键技术与算法

需要实现Doclet

必须引入下述jar包, 来导入com.sun.javadoc.Doclet

<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.8</version>
<scope>system</scope>
<systemPath>/home/zhaozhiwei/applications/jdk1.8.0_181/lib/tools.jar</systemPath>
</dependency>

代码路径

https:github.com:zhaozhiwei1992/javadoc-json-maven-plugin

入口: com.example.Javadoc2JsonMojo#execute

生成javadoc.json文件

com.example.CommentToJson(做成maven插件使用)

{
"com.example.web.rest.PersonResource.findByID(java.lang.Long)#date": "2022/10/25-上午10:19",
"com.example.web.rest.PersonResource#Package": "com/example/springbootcache/controller/PersonController.java",
"com.example.web.rest.PersonResource.findByID(java.lang.Long)#Description": "根据id获取用户信息",
"com.example.web.rest.PersonResource.save(Person)#method": "save",
"com.example.web.rest.PersonResource#author": "zhaozhiwei",
"com.example.web.rest.PersonResource.deleteByID(java.lang.Long)#Description": "根据id删除person信息",
"com.example.web.rest.PersonResource#Title": "PersonController",
"com.example.web.rest.PersonResource.update(Person)#date": "2022/10/25-上午10:21",
"com.example.web.rest.PersonResource.save(Person)#Description": "保存方法",
"com.example.web.rest.PersonResource#Description": "用户信息接口",
"com.example.web.rest.PersonResource#date": "2022/10/25 下午8:23",
"com.example.web.rest.PersonResource.update(Person)#Description": "修改内容看是否会调整缓存",
... 省略了一大堆
}

类代码注释规范

/**
* @Title: PersonController
* @Package: com/example/springbootcache/controller/PersonController.java
* @Description: 用户信息接口
* @author: zhaozhiwei
* @date: 2022/10/25 下午8:23
* @version: V1.0
*/

方法代码注释规范

/**
* @date: 2022/10/25-上午10:19
* @author: zhaozhiwei
* @method: findByID
* @param id : 唯一id
* @return: com.lx.demo.springbootcache.domain.Person
* @Description: 根据id获取用户信息
* 获取十次, 只有第一次是读库,后续都是取缓存
* 直接删掉redis缓存里的内容,仍然可以获取数据,并且走缓存,此时获取的是服务缓存ehcache中的信息
* seq 10 |xargs -i curl -XGET 'http://localhost:8080/persons/2'
*/

参数定义

@parameter额外属性:

@parameter alias="<aliasName>":为mojo参数使用别名

@parameter expression="${aSystemProperty}":使用系统属性表达式对mojo参数进行赋值

@parameter defaultValue="aValue/${anExpression}":提供一个默认值

开发流程

项目构建

mvn archetype:generate -DgroupId=com.example -DartifactId=javadoc-json-maven-plugin -DarchetypeArtifactId=maven-archetype-mojo -DinteractiveMode=false

使用插件

Install

在javadoc-json-maven-plugin项目中执行maven的install命令,

将插件安装到本地仓库

引入自定义插件

在其它项目引入插件测试

展开插件可以看到Mojo列表,由于项目里只有一个Mojo,且Mojo上用注释@goal指定了名称为generate,所以这里只能看到一个javadoc-json:generate

            <plugin>
<groupId>com.example</groupId>
<artifactId>javadoc-json-maven-plugin</artifactId>
<version>2.0-SNAPSHOT</version>
<configuration>
<!-- 指定java注释扫描目录-->
<basePackage>com/example/web/rest</basePackage>
</configuration>
</plugin>

执行插件

双击javadoc-json:generate就会执行这个插件。

执行完毕后,可以看到项目根目录的target文件下多了个javadoc.json文件。

命令行执行插件(可选)

命令格式为mvn groupId:artifactId:version:goal,执行如下命令:

mvn com.example:javadoc-json-maven-plugin:1.0.0-SNAPSHOT:generate

由于我们的插件命名符合规范,所以上面的命令可以简写为:

mvn javadoc-json:generate

尚未解决的问题

javadoc插件去掉异常提示

参考

maven插件开发

https://www.jianshu.com/p/9cfe599b3c5e

参数定义

https://blog.csdn.net/z69183787/article/details/52984622

java注释转json插件开发实战的更多相关文章

  1. json相关类库,java对象与json相互转换

    有效选择七个关于Java的JSON开源类库 转自:http://www.open-open.com/lib/view/open1397870197828.html 翻译: (英语原文:http://w ...

  2. JAVA中使用JSON进行数据传递

    最近在做一个基于JAVA Servlet的WEB应用以及对应的Anroid应用客户端的开发工作. 其中,在接口的访问和数据的传输方面使用的比较多的是使用JSON对象来操作格式化数据:在服务器端采用JS ...

  3. 转载:JAVA中使用JSON进行数据传递

    转载网址:http://www.cnblogs.com/undead/archive/2012/07/18/2594900.html 最近在做一个基于JAVA Servlet的WEB应用以及对应的An ...

  4. GSON中Java对象与JSON互相转换——(一)

    json的转换插件是通过java的一些工具,直接将java对象或集合转换成json字符串. 常用的json转换工具有如下几种: 1)jsonlib 2)Gson:google 3)fastjson:阿 ...

  5. Java并发编程原理与实战五:创建线程的多种方式

    一.继承Thread类 public class Demo1 extends Thread { public Demo1(String name) { super(name); } @Override ...

  6. 【eclipse插件开发实战】Eclipse插件开发3——OSGi、RCP

    Eclipse插件开发实战3--OSGi.RCP 一.OSGi 1. 什么是OSGi框架 OSGi(Open Service Gateway Initiative)框架是运行在JavaVM环境里的服务 ...

  7. 【eclipse插件开发实战】Eclipse插件开发2——SWT

    Eclipse插件开发实战2--SWT 一.SWT简介 SWT(StandardWidget Toolkit) 标准小窗口工具箱,一开源的GUI编程框架,与AWT/Swing有相似的用处,eclips ...

  8. java中的json

    josn: 一种数据传输格式,与开发语言无关,轻量级 一开始是javaScript的,但是后面比较流传,几乎所有语言都有相应的使用API 数据结构: Object---对象 使用花括号{}包含的键值对 ...

  9. JAVA企业级应用服务器之TOMCAT实战

    JAVA企业级应用服务器之TOMCAT实战 链接:https://pan.baidu.com/s/1c6pZjLeMQqc9t-OXvUM66w 提取码:uwak 复制这段内容后打开百度网盘手机App ...

  10. java对象与json串互转

    1:java对象与json串转换: java对象—json串: JSONObject JSONStr = JSONObject.fromObject(object); String str = JSO ...

随机推荐

  1. string,字符串使用指南

    string 创建 创建一个字符串或者字符串数组如下 用 cin 输入,可以读一整串字符直到空格或换行才结束 #include <iostream> using namespace std ...

  2. IPC-7093A-CN 中文 2020底部端子元器件(BTCs)设计和组装工艺的实施

    IPC-7093A 标准为实施底部端子元器件(BTCs)提供了基本的设计和组装指南.具体而言,IPC-7093A 提供了与 BTCs 相关的关键设计.材料.组装.检查.维修.质量和可靠性问题的指南. ...

  3. paramiko模块的使用

    简介: Paramiko是基于Python(2.7,3.4+)版本实现和封装了SSHv2协议,底层是用cryptography实现,我们如果希望远程登录主机或者远程下载或者上传文件到远程主机都可以使用 ...

  4. 多线程实现的Java爬虫程序

    以下是一个Java爬虫程序,它能从指定主页开始,按照指定的深度抓取该站点域名下的网页并维护简单索引. 参数:private static int webDepth = 2;//爬虫深度. 主页的深度为 ...

  5. vue中获取v-for循环出来的元素的相对于父级的最左边的距离

  6. Django之gunicorn部署

    安装: pip install gunicorn 启动应用: gunicorn -w 3 -k gthread -e DJANGO_SETTINGS_MODULE=settings.prod Serv ...

  7. 【C++】关于 Visual Studio 的使用技巧(保姆级教程)

    目录 fliter 视图 输出文件位置设置 查看预处理结果 将目标文件转换为可读的汇编 自定义程序入口 调试时查看变量在内存中的具体值 查看代码的反汇编 fliter 视图 visual studio ...

  8. node-sass安装问题

    前情 最近在开发一个小程序项目,为了开发速度,部分页面使用原有H5,但原有H5需要对小程序做一定兼容适配,发现原有H5项目是个很古老项目. 坑位 在项目启动前,需要执行npm install安装项目依 ...

  9. 【Python】【爬虫】【爬狼】003_获取搜索结果的页数

    # 获取搜索内容的页数 需要的包 import urllib.request # 获取网页源码 import re # 正则表达式,进行文字匹配 from bs4 import BeautifulSo ...

  10. 【前端】解决盒子被撑大问题 box-sizing

    设置 box-sizing:border-box(原本的默认值为:content-box) box-sizing: content-box;/*盒子宽度=CSS中设置的width+border+pad ...