Gradle开发,APT采集页面路由信息(二),页面信息映射关系文档生成

Gradle开发,页面信息映射关系文档生成

一. 功能

为什么需要这个功能,如何设计这个功能。

记录页面对应的URL。

1.1 传递路径

跟注解处理器差不多一样的功能去传递参数,

使用kapt依赖

在这里插入图片描述

在app模块中 声明kapt插件

在这里插入图片描述

注解处理器改为kapt

在这里插入图片描述

验证是否可以收集kotlin类和java类上面标记的注解信息

kotlin

在这里插入图片描述

java

在这里插入图片描述

构建一下项目,成功收集到注解的信息了

在这里插入图片描述

传递路径参数

app模块下加上这个

在这里插入图片描述

在注解处理器中,说明注解处理器kapt拿到了app下传递过来的对应的信息。

在这里插入图片描述

1.2 JSON文件

改造注解处理器,让处理器可以从上面传递过来的路径中生成一个本地的json文件。

引入gson库

在这里插入图片描述

new 一个这个

在这里插入图片描述

把数据保存到jsonobject中,for循环走完后,我们就拿到了注解所以的映射信息的一个数组

在这里插入图片描述

把数组写入一个文件中保存

在这里插入图片描述

构建一下项目,生成这个就说明成功了。

在这里插入图片描述

1.3 生成文档

1.3.1 插件自动传递路径参数(gradle插件优化)

让我们的插件自动实现传递路径参数,这样我们的开发者就不需要手动再去传递了。删掉下面这段kapt代码

在这里插入图片描述

自定义插件放在kapt下面,否则我们的自定义插件可能无法设置kapt的参数

在这里插入图片描述

在我们的插件中写入这段代码,自动传递路径参数

在这里插入图片描述

构建项目,生成这个说明成功了。

在这里插入图片描述

1.3.2 自动清除旧的构建产物(gradle插件优化)

这是我们上一次构建项目生成的保存页面信息的一个目录,我们的目标是每次都自动清除一遍

在这里插入图片描述

用户执行clean命令的时候清除

在这里插入图片描述

在项目的根目录下执行clean命令,这样就成功了

在这里插入图片描述

1.3.3 通过javac编译之后,生成文档

//打印本次构建执行的所有任务的名称
gradle.taskGraph.beforeTask {
    task-> println "qfhqfh task:${task.name}"
}

我们要找到javac的task任务,构建一下项目

在这里插入图片描述

生成本地文档方便其他开发者集成。

package com.qfhqfh.plugin;

import org.gradle.api.Plugin
import org.gradle.api.Project
import groovy.json.JsonSlurper

class DependenciesPluginQfh implements Plugin<Project> {
    //实现apply方法,注入插件的逻辑
    //自动帮助用户传递路径参数到注解处理器中
    //实现旧的构建产物的自动清理
    //在javac任务后,汇总生成文档
    @Override
    void apply(Project project) {
        if (project.extensions.findByName("kapt") != null) {
            project.extensions.findByName("kapt").
                    arguments {
                        arg("root_project_dir", project.rootProject.projectDir.absolutePath)
                    }
        }
//      //删除 上一次构建生成的 router_mapping
        project.clean.doFirst {
            File mappingFile = new File(project.rootProject.projectDir, "router_mapping")
            if (mappingFile.exists()) {
                println ">>>>>>>>>>>>>>>>  mappingFile.exists()"
                mappingFile.deleteDir()
            }
        }
        project.getExtensions().create("router", RouterExtension)

        project.afterEvaluate {
            RouterExtension extension = project["router"]
            println "qfh WIKI path:  ${extension.wikiDir}"
            //javac任务compileDebugJavaWithJavac执行后,
            project.tasks.findAll {
                task ->
                    task.name.startsWith('compile') &&
                            task.name.endsWith('JavaWithJavac')
            }.each {
                task ->
                    task.doLast {
                        File mappingFile = new File(project.rootProject.projectDir, "router_mapping")
                        if (!mappingFile.exists()) {
                            return
                        }
                        File[] allChildFiles = mappingFile.listFiles()
                        if (allChildFiles.length < 1) {
                            return
                        }
                        StringBuilder stringBuilder = new StringBuilder()
                        stringBuilder.append("# 文档\n\n")
                        allChildFiles.each {
                            child ->
                                if (child.name.endsWith(".json")) {
                                    JsonSlurper slurper = new JsonSlurper()
                                    def content = slurper.parse(child)
                                    content.each {
                                        innerContent ->
                                            def url = innerContent['url']
                                            def description = innerContent['description']
                                            def realPath = innerContent['realPath']
                                            stringBuilder.append("## $description \n")
                                            stringBuilder.append("--- url $url \n")
                                            stringBuilder.append("--- realPath $realPath \n\n")

                                    }
                                }
                        }
                        File fileDir = new File(extension.wikiDir)
                        if (!fileDir.exists()) {
                            fileDir.mkdir()
                        }
                        File file = new File(fileDir, "页面文档.md")
                        if (file.exists()) {
                            file.delete()
                        }
                        file.write(stringBuilder.toString())
                    }
            }
        }
        println ">>>>>>>>>>>>>>>>  " + this.getClass().getName()
    }
}

最终我们生成了一个md文档

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qfh-coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值