显示maven仓库里面的jar包的信息--使用python3编写
本帖最后由 shooan 于 2021-1-19 16:04 编辑## 这个脚本用来查询本地maven仓库中的包的信息
### 项目地址
(https://github.com/Blithe-Chiang/installedDependencies)
哈哈,可以拿去随便玩
### 依赖
packaging: 用来版本比较
安装方法 `pip install packaging`
### 使用方法
`python 脚本名字 maven仓库路径?`
maven仓库名字是可选的,可以直接修改下面的代码。
### 运行实例
### 更新日志:
2021/1/19改善功能:如果一个包有不同的版本的话,那么根据版本升序显示
2021/1/19修复bug:修复有时候某个包出现多个相同版本的情况
2021/1/19根据jar包所在的目录获取版本,而不是通过正则表达式来匹配,更加精准
### 代码
```python3
import os
import re
import sys
import functools
# 这个包用来版本比较的,需要自己手动安装,安装指令:pip install packaging
from packaging import version as packaging_version
# 比较版本:升序
def version_compare(a,b):
a = packaging_version.parse(a)
b = packaging_version.parse(b)
if a < b:
return -1
elif a == b:
return 0
else:
return 1
# 把集合形式的版本,变成升序的列表
def convert_set_to_list(s):
l = list(s)
l.sort(key=functools.cmp_to_key(version_compare))
return l
# 退出程序,带有状态码和信息
def quit(code, msg):
print(msg)
sys.exit(code)
# maven仓库 目录
# >>>> 修改这里的路径,这样的话,就不用通过命令行参数传入maven仓库了
maven_dir = r'C:\Users\Blithe\.m2'# 这里改成你的maven目录
if __name__ == '__main__':
# 通过命令行获取路径
if len(sys.argv) == 2:
maven_dir = sys.argv
print('通过命令行获取路径: ', maven_dir)
# 检查是否是正确的路径
if not os.path.isdir(maven_dir):
quit(-1, maven_dir+'不是一个正确的文件夹路径')
# 检查是否是有效的maven仓库
repository_dir = os.path.join(maven_dir, 'repository')# maven仓库目录下面的文件夹
settings_file = os.path.join(maven_dir, 'settings.xml') # maven仓库目录下面的文件
if not os.path.isdir(repository_dir) or not os.path.exists(settings_file):
quit(-1, maven_dir+'不是一个正确的maven仓库目录')
# 保存jar包信息,包括名字和版本
jars = [] # list of jar: (jar_name, jar_version)
for root, dirs, files in os.walk(maven_dir):
for file in files:
if file.endswith('.jar'):
file = file[:-4] # 去掉文件名中的 ".jar"
version = os.path.basename(root)
version_start_pos = file.find('-'+version)
if version_start_pos == -1:
continue
name = file[:version_start_pos]
jars.append((name, version))
if len(jars) == 0:
quit(0, maven_dir+'路径下面没有jar包,程序退出')
# 把名字相同的jar包,版本放在一起
jar_with_version = {jar: set() for jar in jars}
for jar in jars:
jar_with_version].add(jar)
# 实现文字版本的工具
while True:
# 输入jar包的名字
query_name = input('>>请输入要查找的jar包的相关字符串\n>>(输入.exit或者CTRL-C退出) - ')
if query_name == '.exit':
break
found = {k: convert_set_to_list(v) for k, v in jar_with_version.items() if query_name in k}
print('='*30)
if len(found) == 0:
print('没有找到'+query_name+'相关的包')
else:
for name, version in found.items():
print(name, ':', version)
print('='*30)
# TODO: 画一个GUI``` 已收藏,明天试一下,感谢楼主帮到我了! 肥猫警长 发表于 2021-1-18 18:48
已收藏,明天试一下,感谢楼主帮到我了!
哈哈,我看网上好像都没有这样的小工具我就自己写了一个。期待反馈哦
页:
[1]