Skip to content

Commit 203f0e1

Browse files
committed
docs: 完善使用文档
1 parent 1289ea5 commit 203f0e1

File tree

4 files changed

+214
-10
lines changed

4 files changed

+214
-10
lines changed
38.1 KB
Loading
49 KB
Loading
35.6 KB
Loading

README.md

Lines changed: 214 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,221 @@
1+
# Class Version Tracker
2+
3+
# 一、这是什么?应用场景?
4+
5+
追踪`Maven`中央仓库中某个包的某个类的变化历史,用于在开发`Agent`类产品的时候辅助提升开发效率与质量,比如我要通过`ASM` `Hook``dubbo`的某个类`Foo`,但是我不知道这个`Foo`在所有的版本中都发生了哪些变化,那么我的代码可能只对其中某些版本有效,对另外一些版本就可能会`crash`,但是所有的版本太多了又不方便全部测试那会是一个很大的工作量,那么使用这个工具就能够追踪类`Foo`将类`Foo`发生变化的版本和对应的`Class`字节码找出来,只需要测试发生了变化的这些类和版本就可以了,基本上能够将工作量缩小一个数量级(属于弱辅助性工具效果有限,手头没更好的就凑活用...)。
6+
7+
# 二、下载安装
8+
9+
`release`页面下载
10+
11+
# 三、使用教程
12+
13+
所有命令:
14+
15+
![image-20230627230050436](README.assets/image-20230627230050436.png)
16+
17+
主要是track命令:
18+
19+
![image-20230627230912197](README.assets/image-20230627230912197.png)
20+
121
Usage:
222

323
```bash
4-
./class-version-tracker.exe track -g org.apache.dubbo -a dubbo -c org.apache.dubbo.rpc.protocol.DelegateExporterMap -o output
5-
./class-version-tracker.exe track -g org.apache.dubbo -a dubbo -c org.apache.dubbo.rpc.protocol.AbstractProtocol -o output
6-
./class-version-tracker.exe track -g org.apache.dubbo -a dubbo -c org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol -o output
7-
./class-version-tracker.exe track -g org.apache.dubbo -a dubbo -c org.apache.dubbo.common.extension.ExtensionLoader -o output
8-
9-
./class-version-tracker.exe track -g com.alibaba -a dubbo -c com.alibaba.dubbo.rpc.protocol.AbstractProtocol -o output
10-
./class-version-tracker.exe track -g com.alibaba -a dubbo -c com.alibaba.dubbo.common.extension.ExtensionLoader -o output
11-
./class-version-tracker.exe track -g com.alibaba -a dubbo -c com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol -o output
24+
class-version-tracker.exe track -g org.apache.dubbo -a dubbo -c org.apache.dubbo.rpc.protocol.DelegateExporterMap -o output
25+
class-version-tracker.exe track -g org.apache.dubbo -a dubbo -c org.apache.dubbo.rpc.protocol.AbstractProtocol -o output
26+
class-version-tracker.exe track -g org.apache.dubbo -a dubbo -c org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol -o output
27+
class-version-tracker.exe track -g org.apache.dubbo -a dubbo -c org.apache.dubbo.common.extension.ExtensionLoader -o output
28+
29+
class-version-tracker.exe track -g com.alibaba -a dubbo -c com.alibaba.dubbo.rpc.protocol.AbstractProtocol -o output
30+
class-version-tracker.exe track -g com.alibaba -a dubbo -c com.alibaba.dubbo.common.extension.ExtensionLoader -o output
31+
class-version-tracker.exe track -g com.alibaba -a dubbo -c com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol -o output
32+
```
33+
34+
输出结果:
35+
36+
![image-20230627230554084](README.assets/image-20230627230554084.png)
37+
38+
会对给定的类的所有版本按照md5分组,对于每个分组,会使用当前组下的最小的版本作为文件名把类的字节码写到磁盘上,所以输出的这些带版本的class大体上是有序的。
39+
40+
report.json是对结果的一个概况:
41+
42+
```json
43+
{
44+
"group_id": "org.apache.dubbo",
45+
"artifact_id": "dubbo",
46+
"class": "org.apache.dubbo.rpc.protocol.AbstractProtocol",
47+
"groups": [
48+
{
49+
"md5": "4053ac9260da33488adef1d98e49c562",
50+
"versions": [
51+
"2.7.0",
52+
"2.7.1"
53+
]
54+
},
55+
{
56+
"md5": "9068b0f818238af2d10afd00cb7484ee",
57+
"versions": [
58+
"2.7.2",
59+
"2.7.3",
60+
"2.7.4",
61+
"2.7.4.1"
62+
]
63+
},
64+
{
65+
"md5": "574c56a2c24717733216872bfe3c3bd9",
66+
"versions": [
67+
"2.7.5"
68+
]
69+
},
70+
{
71+
"md5": "d848acbb0a65b5aef31980383b604faf",
72+
"versions": [
73+
"2.7.6",
74+
"2.7.7",
75+
"2.7.8",
76+
"2.7.9",
77+
"2.7.10"
78+
]
79+
},
80+
{
81+
"md5": "bae923e452c3bf3f5db749f7b768398e",
82+
"versions": [
83+
"2.7.11",
84+
"2.7.12"
85+
]
86+
},
87+
{
88+
"md5": "bd8bf8b79587a145f3ac056fdd3637f3",
89+
"versions": [
90+
"2.7.13",
91+
"2.7.15",
92+
"2.7.16"
93+
]
94+
},
95+
{
96+
"md5": "fbf1e2ef3a8a84e1201754c3084fbf7b",
97+
"versions": [
98+
"2.7.14",
99+
"2.7.17",
100+
"2.7.18",
101+
"2.7.19",
102+
"2.7.20",
103+
"2.7.21",
104+
"2.7.22",
105+
"2.7.23"
106+
]
107+
},
108+
{
109+
"md5": "1ac018272f188f048b3f5caf6108942b",
110+
"versions": [
111+
"3.0.0",
112+
"3.0.1"
113+
]
114+
},
115+
{
116+
"md5": "5556cccc3bfc0f31ec77cd305425e8de",
117+
"versions": [
118+
"3.0.0.preview"
119+
]
120+
},
121+
{
122+
"md5": "37ea7430282b0dc77109e3ec07f88138",
123+
"versions": [
124+
"3.0.2"
125+
]
126+
},
127+
{
128+
"md5": "f6dfe4cf70aa970f4b6f4220e522ee9f",
129+
"versions": [
130+
"3.0.2.1"
131+
]
132+
},
133+
{
134+
"md5": "69bb54ba4b7696b473f49668661c12b2",
135+
"versions": [
136+
"3.0.3"
137+
]
138+
},
139+
{
140+
"md5": "8850dbc76bb42dd461cd080056358756",
141+
"versions": [
142+
"3.0.4",
143+
"3.0.5",
144+
"3.0.6",
145+
"3.0.7",
146+
"3.0.8"
147+
]
148+
},
149+
{
150+
"md5": "2524d0620736b93113463f97858231e2",
151+
"versions": [
152+
"3.0.9",
153+
"3.0.10"
154+
]
155+
},
156+
{
157+
"md5": "d45f67d3c1fcc4ef893b2ac2ca8b0578",
158+
"versions": [
159+
"3.0.11",
160+
"3.0.12",
161+
"3.0.13",
162+
"3.0.14",
163+
"3.0.15",
164+
"3.1.0",
165+
"3.1.1",
166+
"3.2.0-beta.1"
167+
]
168+
},
169+
{
170+
"md5": "a50a4aa97e6d63cf764d2f6bf20b4ffa",
171+
"versions": [
172+
"3.1.2",
173+
"3.1.4",
174+
"3.1.5",
175+
"3.1.6",
176+
"3.1.7",
177+
"3.1.8",
178+
"3.1.9",
179+
"3.1.10",
180+
"3.2.0-beta.2",
181+
"3.2.0-beta.3"
182+
]
183+
},
184+
{
185+
"md5": "e54c580abab3801dfa11bbfe5d6e4f4f",
186+
"versions": [
187+
"3.1.3"
188+
]
189+
},
190+
{
191+
"md5": "b2a49097c46db20e6c25fb04a5ea6b59",
192+
"versions": [
193+
"3.2.0",
194+
"3.2.1",
195+
"3.2.2"
196+
]
197+
},
198+
{
199+
"md5": "a8d9641f4243dc7562e4de807041f6da",
200+
"versions": [
201+
"3.2.0-beta.4",
202+
"3.2.0-beta.5",
203+
"3.2.0-beta.6"
204+
]
205+
}
206+
]
207+
}
12208
```
13209

14-
# TODO
210+
# 四、TODO
211+
212+
- 支持指定是使用本地mvn配置的镜像仓库还是直接连中央仓库,因为某些镜像仓库有点坑(某里),会有那种版本空洞,冷不丁给你来一下
213+
214+
- 支持中央仓库之外的仓库
215+
216+
217+
218+
219+
15220

16-
- 支持指定是使用本地mvn配置的镜像仓库还是直接连中央仓库,因为某些镜像仓库有点坑,会有那种版本空洞,冷不丁给你来一下
17221

0 commit comments

Comments
 (0)