Skip to content

jd-opensource/dead-code

Repository files navigation

简介

废弃代码打标工具收集生产运行的Java方法信息,对代码库中不在运行的代码进行标记,辅助进行废弃代码的删除和清理。

架构

运行原理 架构图

部署

部署图

运行环境

  • JDK 1.8+
  • apache-maven-3.8.3

编辑构建

#进入项目的根目录,执行如下命令。 
mvn  -DskipTests clean package -Pprod
  • 构建生成dead-code-dump/target/dead-code-dump-版本号.jar,用于连接到目标JVM,获取执行的方法。 可以将该jar与应用部署到统一虚拟机或者DOCKER容器中。并在应用停止时(比如在stop.sh中)执行该jar
  • 构建生产dead-code-mark-server/target/dead-code-mark-server-assembly/dead-code-mark-server.zip,是服务端,用于:
    • 接受客户端上传的方法记录文件,
    • 按应用进行文件合并;
    • 提供应用和代码仓库的管理功能;
    • 对代码仓库执行废弃代码打标;

服务端部署

准备(假设我们的目录是/var/export/apps/):

  • 将dead-code-mark-server.zip拷贝到应用服务器/export/apps目录下,
  • apache-maven-3.8.3-bin.tar.gz拷贝到应用服务器/export/apps目录下,
  • 执行解压缩:
cd /var/export/apps/
# 解压
unzip dead-code-mark-server.zip
tar -xzfv apache-maven-3.8.3-bin.tar.gz
# 启动
sh /var/export/apps/dead-code-mark-server/bin/startup.sh

收集JVM运行方法记录

  • 在JVM停止前运行脚本将JVM运行的方法记录上传到OSS
  • 通过HTTP接口触发JVM运行方法记录的文件合并
  • 通过HTTP接口触发代码仓库的废弃方法打标

在应用停止前运行下述脚本

java -cp ${JAVA_HOME}/lib/sa-jdi.jar:dead-code-dump.jar com.jd.jdt.std.deadcode.common.SaApp $pid $appName $uploadUrl

#例如
#$JAVA_HOME/bin/java -cp $JAVA_HOME/lib/sa-jdi.jar:dead-code-dump-2.0.13-SNAPSHOT.jar com.jd.jdt.std.deadcode.common.SaApp 10660 dead-code-mark-server http://localhost:8019/upload

其中参数说明如下: pid: 目标Java进程的PID appName: 应用唯一标识,用于区分不同的应用,不重复即可 uploadUrl: 我们上一步部署的服务端提供的地址,一般为http://IP:PORT/upload

通过HTTP接口触发JVM运行方法记录的文件合并

curl -X GET http://IP:PORT/agg/agg?agg=您的appName

通过HTTP接口触发代码仓库的废弃方法打标

curl -X POST http://IP:PORT/mark/repo 
curl -X POST POST http://IP:PORT/mark/repo
-H "Content-Type: application/json"
-d '{"prefixOfNewBranch": "schedule","repoPath": "git@server:your-group/your-app.git","invokedMethodQuery":[{"queryFrom": "OSS","invokedMethodStaticPath": ["deadcode/result/your_app.txt"]}]}'

代码打标样例

样例图

联系我们

Email: [email protected]

开源协议

废弃代码打标工具采用Apache License 2.0协议,详情LICENSE

About

A tool that helps mark deprecated Java methods

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published