标签:
唯一一个被人点了推荐的是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()
标签:
原文地址:http://www.cnblogs.com/pppploi8/p/5669172.html