java导出word文档jar_javadoc导出成word文档

刚刚上次弄完了一个坑爹的任务,这次我领导又给我一个让人脑瓜子疼的任务了。

基本上客户他在验收我们系统的时候,都会要求我们编写相关的文档,这次也不例外。

只是这次的客户要求我们给出接口文档。不仅是要整个controller的rest接口文档,还要给出service层的接口,连工具类都要有。这不是在为难我胖虎么。

想我辛辛苦苦给全部controller方法都加上了swagger注解,想我辛辛苦苦把整个项目全部方法都加上了完美的javadoc注释,想我关键代码都留了逻辑注释,

为什么还要我给你弄个word文档。

抱怨归抱怨,该干的活还是要干的,谁让这该死的钱真香。

但是要怎么弄呢?这是个很严重的问题,毕竟我的项目方法没一千都有一百,总不能一个个给他Ctrl C + Ctrl V吧,那我的弄到何年何月。

swagger的我可以找工具导出成word文档,可是service层的呢?我的工具类呢?

有没有现成的工具呢?问下度娘,~~~~~~~~~成功摸鱼半天,毫无收获

那能不能像上次那样用正则自己搞呢?试一哈 ~~~~~~~~~~~~~ 成功摸鱼半天,失败了,有些代码的文档注释太坑爹了,方法内用文档注释,搞事情吧,怎么还有部分前面的*号都没了。

idea不是可以导出javadoc文档么?能不能导出word呢?试一哈 ~~~~~~~~~~~~成功摸鱼半天,毫无办法,不过我找到了一个神奇的方法com.sun.tools.javadoc.Main.execute(initAgrs); 有没有觉得很眼熟,没错,这就是jdk自己的javadoc工具。

先让我们来膜拜下前辈的文章:

https://blog.csdn.net/10km/article/details/78252586

原理其实很简单,javadoc 这个jdk的 tools.jar 中的包的类已经帮我们解析好了java文件,我们需要做的仅仅是重写一个Doclet,然后在它里面处理下javadoc给我弄好的RootDoc就行,剩下就只剩操作RootDoc它了。

先看下javadoc这个包先

b85976a12879da7301f835f9262c082f.png

其中我们将直接用到com.sun.tools.javadoc.Main这个类

bcb7b61372a7be3daf3d96816d390ead.png

那我们需要做啥呢?最简单的就3步。

1、调用com.sun.tools.javadoc.Main.execute()这个方法,传入参数

54c540bef9b565ca350037edace100f0.png

2、写一个自己的Doclet类。

951edab21ed16720ae7f127a74641d38.png

3、拿到数据后,自己解析class类型、方法名、类名、方法注释、类注释、字段注释、参数注释............然后爱生成HTML、爱生成Word、爱生成Excel,随你们喜欢。

大概怎么用说完了,展示下我的生成后的效果吧,我没调样式,毕竟用poi操作word真的是难受

26a84f1aa3533dc317750c9fe27bd7bc.png

上代码:

项目结构:(一定要有tools.jar,他在你们jdk的lib目录里,另外POI操作word的相关包要导齐全,不然各种坑)

7b50fa12554d3a7c19851c2148ae6597.png

pom.xml主要就是为了引入POI的包

4.0.0

com.hongcheng

javadoc_generator

0.0.1-SNAPSHOT

jar

javadoc_generator

http://maven.apache.org

UTF-8

1.8

1.8

1.8

org.apache.poi

poi-ooxml

4.0.0

org.apache.poi

poi-scratchpad

4.0.0

ClassComment.java用来保存类数据的实体

packagecom.hongcheng.javadoc_generator.entity;importjava.util.List;/*** java类的相关信息*/

public classClassComment {/**类的全类名*/

privateString className;/**类的简单类名*/

privateString simpleClassName;/**类注释*/

privateString classComment;/**字段相关信息*/

private Listfields;/**方法相关信息*/

private Listmethods;publicString getClassName() {returnclassName;

}publicString getSimpleClassName() {returnsimpleClassName;

}publicString getClassComment() {returnclassComment;

}public ListgetFields() {returnfields;

}public ListgetMethods() {returnmethods;

}public voidsetClassName(String className) {this.className =className;

}public voidsetSimpleClassName(String simpleClassName) {this.simpleClassName =simpleClassName;

}public voidsetClassComment(String classComment) {this.classComment =classComment;

}public void setFields(Listfields) {this.fields =fields;

}public void setMethods(Listmethods) {this.methods =methods;

}

@OverridepublicString toString() {return "{className: " + className + ", simpleClassName: " + simpleClassName + ", classComment: " +classComment+ ", fields: " + fields + ", methods: " + methods + "}";

}

}

FieldComment.java用来保存字段和参数的实体

packagecom.hongcheng.javadoc_generator.entity;/*** java类中字段的相关信息*/

public classFieldComment {/**字段类型*/

privateString clasz;/**类的简单类名*/

privateString simpleClassName;/**字段注释*/

privateString fieldComment;/**字段名*/

privateString fieldName;/**默认值,必须是final修饰的基本数据类型及其包装类*/

privateObject defaultValue;publicString getSimpleClassName() {returnsimpleClassName;

}public voidsetSimpleClassName(String simpleClassName) {this.simpleClassName =simpleClassName;

}publicString getClasz() {returnclasz;

}publicString getFieldComment() {returnfieldComment;

}publicString getFieldName() {returnfieldName;

}publicObject getDefaultValue() {returndefaultValue;

}public voidsetClasz(String clasz) {this.clasz =clasz;

}public voidsetFieldComment(String fieldComment) {this.fieldComment =fieldComment;

}public voidsetFieldName(String fieldName) {this.fieldName =fieldName;

}public voidsetDefaultValue(Object defaultValue) {this.defaultValue =defaultValue;

}

@OverridepublicString toString() {return "{clasz: " + clasz + ", simpleClassName: " + simpleClassName + ", fieldComment: " +fieldComment+ ", fieldName: " + fieldName + ", defaultValue: " + defaultValue + "}";

}

}

MethodComment.java用来保存方法数据的实体

packagecom.hongcheng.javadoc_generator.entity;importjava.util.List;/*** java类中方法的相关信息*/

public classMethodComment {/**方法注释*/

privateString methodComment;/**方法名*/

privateString methodName;/**参数*/

private Listparams;/**返回值*/

privateFieldComment returnEntity;publicString getMethodComment() {returnmethodComment;

}publicString getMethodName() {returnmethodName;

}public ListgetParams() {returnparams;

}publicFieldComment getReturnEntity() {returnreturnEntity;

}public voidsetMetho

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值