python——多线程maven批量打包工具

实现思路

  1. 通过命令进入路径执行“maven clean”和“maven package”
  2. window执行多个命令语法:aa && bb (执行aa成功后,才执行bb)
  3. 通过任务队列的方式实现
  4. 待所有线程任务完成后,再进行收取包操作
  5. 收取包操作,默认匹配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()

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Maven是一个项目管理工具,它提供了一种简单的方式来管理项目的依赖关系。在使用Maven进行项目开发的过程中,我们经常会遇到引入第三方jar的需求,从而为项目提供所需的功能。 Maven提供了一种批量安装第三方jar的功能,可以通过在项目的pom.xml文件中声明依赖关系来实现。首先,我们需要找到所需的第三方jarMaven坐标,这通常括groupId、artifactId和version三个属性。 在pom.xml文件中,我们可以通过在dependencies节点下添加多个dependency节点来声明多个第三方jar的依赖关系。在每个dependency节点内,我们需要填写对应第三方jar的groupId、artifactId和version属性。 当我们保存并关闭pom.xml文件后,Maven会自动从中央仓库或私有仓库中下载并安装所需的第三方jar。这样,我们就可以在项目中直接引用这些jar,并使用其中的类和方法。 除了在pom.xml文件中声明第三方jar的依赖关系外,我们还可以使用Maven命令进行批量安装。通过执行"mvn install"命令,Maven会按照pom.xml文件中所声明的依赖关系,自动下载并安装所有的第三方jar。 总之,Maven是一个非常方便的批量安装第三方jar工具,通过在项目的pom.xml文件中声明依赖关系,我们可以轻松地管理和安装所需的第三方jar。这样,我们可以快速、高效地开发自己的项目,节省了手动下载和安装第三方jar的时间和努力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Walter Sun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值