码迷,mamicode.com
首页 > 编程语言 > 详细

[Python]JavaEE项目更新包打包工具

时间:2016-07-14 10:19:19      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:

唯一一个被人点了推荐的是Python脚本,嗯,果然还是应该发点现成的脚本工具么?

 

首先说下这东西的制作环境

人在外包公司,规模不大,规范啥的不谈了,完全没有

JavaWeb项目部署后要更新代码每次都要自己看修改了什么文件,手动复制变更文件到服务器单独替换,特别是改了一堆BUG涉及到各种Java,JSP文件十几二十几个的时候...手动从Tomcat里找复制编译好的class相当痛苦

然而也说了,没规范更没现成的工具...于是乎想了想就自己手写了个脚本负责自动打包

 

单位项目主要是Eclipse+SVN,SVN是使用的sqlite3作为本地数据存储来存储文件变更列表,那么利用SVN就可以很方便的快速获取文件更新信息了

鉴于不同的IDE对应的项目文件结构不一样,这个脚本也只能用在相同环境(Eclipse+SVN)的应用上

用法很简单,按提示输入SVN项目目录/打包起始版本号/Tomcat应用目录/生成差异目录,就会自动读取SVN对应版本号开始到最后一个版本为止的所有文件变动信息,并且去Tomcat找到对应文件(class/jsp等等),复制到生成差异目录的对应位置内,最后只需要备份下原应用,然后整个文件夹粘贴替换重启就算完成更新了

没学过Python随便瞎写写的,变量名啊规范啥的就无视吧....

import sqlite3
import traceback
import os
import os.path
from shutil import copy

#
# 这个工具的作用是根据SVN的文件变更记录,自动去Tomcat目录复制变更class方便制作更新包
# 只支持Eclipse项目(不同IDE创建的项目文件目录结构不同)
#

def addLog(oldlog,logtext):
    print(logtext)
    return oldlog+"\n"+logtext
def getDirByPath(dirpath):
    return dirpath[0:dirpath.rindex("/")]
def getFilenameByPath(dirpath):
    return dirpath[dirpath.rindex("/")+1:len(dirpath)]
def myCopyFile(c_srcfile,c_desfile):
    if (os.path.exists(c_srcfile) == False):
        return False
    if (os.path.exists(getDirByPath(c_desfile)) == False):
        os.makedirs(getDirByPath(c_desfile))
    # 如果是class自自动遍历相关内部类,如果有则一起复制 ClassName$xxx.class 格式文件
    tmpfile = getFilenameByPath(c_srcfile)
    if (tmpfile.endswith(".class")):
        tmpdir = getDirByPath(c_srcfile)
        tmpfile = tmpfile[0:len(tmpfile)-6] + "$"
        for d in os.listdir(tmpdir):
            if(d.startswith(tmpfile)):
                copy(tmpdir+"/"+d,getDirByPath(c_desfile)+"/"+d)
    copy(c_srcfile,c_desfile)
    return True

print("欢迎使用SVN差异自动打包脚本,以下要求输入路径末尾均无\\符号")
print("本脚本只适用于Eclipse的Java EE项目")
print("内部类会全部复制,如有需要请手动删除多余内部类")
path = input("请输入SVN项目目录:")
try:
    cx = sqlite3.connect(path + "\\.svn\\wc.db")
    cu = cx.cursor()
    ver = input("请输入打包版本号:")
    cu.execute("select local_relpath,changed_revision from NODES where kind=‘file‘ and changed_revision>=" + ver + " order by changed_revision")
    srcpath = input("请输入Tomcat项目文件夹:")
    despath = input("请输入差异文件保存位置:")
    log = ""
    log = addLog(log,"[开始处理差异文件,从版本"+ver+"]开始:")
    while(True):
        data = cu.fetchone()
        if (data == None):
            break
        # 根据扩展名判断转换路径
        if (data[0].startswith("WebContent/")):
            # WebContent资源转换
            srcfile = srcpath + data[0][10:len(data[0])]
            desfile = despath + data[0][10:len(data[0])]
            if(myCopyFile(srcfile,desfile)):
                log = addLog(log,"[已处理][版本号:"+str(data[1])+"]"+data[0])
            else:
                print(srcfile)
                log = addLog(log,"[未处理][版本号:"+str(data[1])+"]中的文件["+data[0]+"]不存在!")
        elif(data[0].startswith("src/")):
            # SRC路径转换
            if (data[0].endswith("java")):
                tmp = data[0][3:len(data[0])-4]+"class"
            else:
                tmp = data[0][3:len(data[0])]
            tmp = "/WEB-INF/classes" + tmp
            srcfile = srcpath + tmp
            desfile = despath + tmp
            if(myCopyFile(srcfile,desfile)):
                log = addLog(log,"[已处理][版本号:"+str(data[1])+"]"+data[0])
            else:
                log = addLog(log,"[未处理][版本号:"+str(data[1])+"]中的文件["+data[0]+"]不存在!")
        elif(data[0].startswith("config/")):
            # config路径转换
            srcfile = srcpath + "/WEB-INF/classes" + data[0][6:len(data[0])]
            desfile = despath + "/WEB-INF/classes" + data[0][6:len(data[0])]
            if(myCopyFile(srcfile,desfile)):
                log = addLog(log,"[已处理][版本号:"+str(data[1])+"]"+data[0])
            else:
                log = addLog(log,"[未处理][版本号:"+str(data[1])+"]中的文件["+data[0]+"]不存在!")
        else:
            # 其他资源写日志暂不处理
            log = addLog(log,"[未处理][版本号:"+str(data[1])+"]中的文件["+data[0]+"]无法识别,请手动处理!")
    file_object = open(despath + "/chuli.log", w)
    file_object.write(log)
    file_object.close()
    print("程序执行完毕,日志已写到["+srcpath+"\\chuli.log],请根据需要查阅手动处理[未处理]项目")
except:
    print("程序执行异常")
    traceback.print_exc()

[Python]JavaEE项目更新包打包工具

标签:

原文地址:http://www.cnblogs.com/pppploi8/p/5669172.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!