关于java:java注释转json插件开发实战

目标

将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/9cf…

参数定义

https://blog.csdn.net/z691837…

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理