实现思路
- 通过命令进入路径执行“maven clean”和“maven package”
- window执行多个命令语法:aa && bb (执行aa成功后,才执行bb)
- 通过任务队列的方式实现
- 待所有线程任务完成后,再进行收取包操作
- 收取包操作,默认匹配target路径中的*.jar和*.war
使用方式
假设改脚本文件名为:autopackage.py
暂不支持跨盘符打包
-
全量打包
输入命令:python autopackage.py
注:该命令会将所有路径的包全部打包,并收集 -
自定义打包
输入命令:python autopackage.py systemkey
注:
1.systemkey为配置中的系统key
2.自定义多个打包,systemkey以英文逗号隔开,例如:python autopackage.py systemkey1,systemkey2
代码实现
线程数量未抽取成变量,使用时可根据具体情况调整for循环
配置参数说明:
参数 | 说明 |
---|---|
disk | 打包项目所在盘符 |
collect_path | 打包完成后,收取包路径 |
proMap | 项目路径配置(注意:路径配置与target同级) |
#!/usr/python/bin
# -*- coding: utf-8 -*-
import os
import queue
import sys
import threading
import time
# 定义线程类
class myThread(threading.Thread):
# q为先前组装好的打包任务(及打包所在路径)
def __init__(self, threadID, q, disk):
threading.Thread.__init__(self)
self.threadID = threadID
self.q = q
self.disk = disk
def run(self):
start_package(self.q, self.disk)
def start_package(q, disk):
while not q.empty():
p = q.get() # 默认block=True, timeout=None
os.system("%s && cd %s && mvn clean && mvn package -DskipTests" % (disk, p))
def collect_packages(proMapList, collect_path):
for i, el in enumerate(proMapList):
eljar = el + "*.jar " + collect_path
elwar = el + "*.war " + collect_path
print(eljar)
print(elwar)
os.system(eljar)
os.system(elwar)
def main():
localtime=time.asctime(time.localtime(time.time()))
startTime=time.time()
print(localtime)
# 所在硬盘
disk = "C:"
# 包收集路径
collect_path = "D:\\collect_packages"
# 硬盘相对路径
proMap = dict([
("此处填写系统key", disk + "此处填写硬盘中路径")
])
# 临时备份字典
proMapList = list()
threads = []
workQueue = queue.Queue(10)
if (sys.argv.__len__() == 1):
pathlist = list(proMap.keys())
for p in pathlist:
workQueue.put(proMap.get(p))
proMapList.append("copy %s" % (proMap.get(p) + "\\target\\"))
# proMapList.append("copy %s %s" % (proMap.get(p) + "\\target\\" + p + ".jar", collect_path))
else:
pathlist1 = str(sys.argv[1]).split(",")
i = 0
# 根据脚本所带参数,遍历参数,往队列中增加任务(即打包所在路径),并拼接取包路径
for i in range(0, len(pathlist1)):
workQueue.put(proMap[pathlist1[i]])
proMapList.append("copy %s" % (
proMap[pathlist1[i]] + "\\target\\"))
# proMapList.append("copy %s %s" % (proMap[pathlist1[i]] + "\\target\\" + pathlist1[i] + ".jar", collect_path))
for i in range(1, 8):
thread = myThread(threadID=i, q=workQueue, disk=disk)
thread.start()
threads.append(thread)
for thread in threads:
thread.join()
print("package over!")
# 批量取包
print("collecting packages...")
# 先清空取包路径
os.system("del /q %s" % (collect_path))
# 再复制取包
collect_packages(proMapList, collect_path)
print("collect over!")
print(localtime)
endTime=time.time()
print("cost: %.2f s"%(endTime-startTime))
main()