實現思路
- 通過命令進入路徑執行“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()