shooan 发表于 2021-1-18 16:50

显示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

已收藏,明天试一下,感谢楼主帮到我了!

shooan 发表于 2021-1-18 19:34

肥猫警长 发表于 2021-1-18 18:48
已收藏,明天试一下,感谢楼主帮到我了!

哈哈,我看网上好像都没有这样的小工具我就自己写了一个。期待反馈哦
页: [1]
查看完整版本: 显示maven仓库里面的jar包的信息--使用python3编写