1.说明
根据libs.txt去本地maven仓库里面检索到指定jar包, 然后压缩为libs.zip
2.libs.txt
需要导出的依赖列表, 每行一个, 格式为 {groupId}:{artifactId}:{version}
org.apache.commons.discovery:discovery:0.2
org.apache.commons.logging:logging:1.0.4
javax.wsdl:wsdl:1.5.1
3.repository_path.txt
D:\apache-maven-3.6.3\repository
4.run.py
执行导出依赖的脚本, libs.txt和repository_path.txt放在当前目录即可
import os
import sys
import time
from loguru import logger
import zipfile
import os
def files_to_zip(zip_filename, file_paths):
logger.info(f'开始打包jar, 数量:{len(file_paths)}')
"""
将一组文件(绝对路径)打包成 ZIP 文件
:param zip_filename: 输出的 ZIP 文件名(如 'archive.zip')
:param file_paths: 文件绝对路径的列表(list of str)
"""
with zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED) as zipf:
for file_path in file_paths:
if os.path.isfile(file_path):
# 将文件以相对路径(仅文件名)添加到 ZIP 中
# 你也可以使用 arcname 控制 ZIP 内部路径
zipf.write(file_path, arcname=os.path.basename(file_path))
else:
print(f"警告: 文件不存在,已跳过: {file_path}")
# 计算文件大小
def get_readable_size(file_path):
"""
返回文件大小的可读字符串,如 5.23 KB, 1.45 MB, 2.10 GB
"""
if not os.path.exists(file_path):
return "文件不存在"
size_bytes = os.path.getsize(file_path)
# 定义单位和对应的转换
for unit, divisor in [
('B', 1),
('KB', 1024),
('MB', 1024 ** 2),
('GB', 1024 ** 3),
('TB', 1024 ** 4)
]:
if size_bytes < 1024 * divisor:
size = size_bytes / divisor
return f"{size:.2f} {unit}"
# 超过 TB 的情况
size_tb = size_bytes / (1024 ** 4)
return f"{size_tb:.2f} TB"
st = time.time()
# 要打包的jar列表
with open('libs.txt', 'r', encoding='utf-8') as f:
content = f.read()
cl = len(content.split('\n'))
logger.info(f'读取到待打包的列表, 数量:{cl}')
# 仓库路径
with open('repository_path.txt', 'r', encoding='utf-8') as f:
r = f.read()
if not os.path.exists(r):
logger.error(f'仓库路径【{r}】不存在')
time.sleep(5)
sys.exit(0)
# 查找jar
jars = []
for lib in content.split('\n'):
try:
m = lib.split(':')
f = os.path.join(r, os.sep.join(m[0].split('.')), m[1], m[2])
print(f)
if not os.path.exists(f):
continue
for file in os.listdir(f):
if m[1] in file and m[2] in file and file.endswith('jar'):
jars.append(os.path.join(f, file))
logger.info(f'已找到jar: {file}')
except Exception as e:
logger.warning(f'jar包格式错误! {lib}')
if len(jars) == 0:
logger.error(f'未检索到对应的jar')
time.sleep(5)
sys.exit(0)
files_to_zip('libs.zip', jars)
size_str = get_readable_size('libs.zip')
logger.info(f'jar打包完成, 耗时:{round(time.time() - st, 2)}秒, 压缩包大小:{size_str}, jar包数量:{len(jars)}')
logger.warning('5秒后将会自动关闭该窗口')
time.sleep(5)
# pyinstaller -F -i package.png main.py --clean --noconfirm

252

被折叠的 条评论
为什么被折叠?



