吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1606|回复: 2
收起左侧

[Python 转载] 显示maven仓库里面的jar包的信息--使用python3编写

[复制链接]
shooan 发表于 2021-1-18 16:50
本帖最后由 shooan 于 2021-1-19 16:04 编辑

这个脚本用来查询本地maven仓库中的包的信息

项目地址

Github: installedDependencies
哈哈,可以拿去随便玩

依赖

packaging: 用来版本比较
安装方法 pip install packaging

使用方法

python 脚本名字 maven仓库路径?
maven仓库名字是可选的,可以直接修改下面的代码。

运行实例

运行实例

运行实例

更新日志:

2021/1/19  改善功能:如果一个包有不同的版本的话,那么根据版本升序显示
2021/1/19  修复bug:修复有时候某个包出现多个相同版本的情况
2021/1/19  根据jar包所在的目录获取版本,而不是通过正则表达式来匹配,更加精准

代码


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[1]
        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[0]: set() for jar in jars}

    for jar in jars:
        jar_with_version[jar[0]].add(jar[1])

    # 实现文字版本的工具
    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```

免费评分

参与人数 2吾爱币 +6 热心值 +2 收起 理由
culprit + 1 + 1 谢谢@Thanks!
苏紫方璇 + 5 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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

哈哈,我看网上好像都没有这样的小工具我就自己写了一个。期待反馈哦
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 20:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表