[Python]JavaEE項目更新包打包工具,pythonjavaee

來源:互聯網
上載者:User

[Python]JavaEE項目更新包打包工具,pythonjavaee

唯一一個被人點了推薦的是Python指令碼,嗯,果然還是應該發點現成的指令碼工具嗎?

 

首先說下這東西的製作環境

人在外包公司,規模不大,規範啥的不談了,完全沒有

JavaWeb項目部署後要更新代碼每次都要自己看修改了什麼檔案,手動複製變更檔案到伺服器單獨替換,特別是改了一堆BUG涉及到各種Java,JSP檔案十幾二十幾個的時候...手動從Tomcat裡找複製編譯好的class相當痛苦

然而也說了,沒規範更沒現成的工具...於是乎想了想就自己手寫了個指令碼負責自動打包

 

單位項目主要是Eclipse+SVN,SVN是使用的sqlite3作為本機資料儲存來隱藏檔變更列表,那麼利用SVN就可以很方便的快速擷取檔案更新資訊了

鑒於不同的IDE對應的專案檔結構不一樣,這個指令碼也只能用在相同環境(Eclipse+SVN)的應用上

用法很簡單,按提示輸入SVN項目目錄/打包起始版本號碼/Tomcat應用目錄/產生差異目錄,就會自動讀取SVN對應版本號碼開始到最後一個版本為止的所有檔案變動資訊,並且去Tomcat找到對應檔案(class/jsp等等),複製到產生差異目錄的對應位置內,最後只需要備份下原應用,然後整個檔案夾粘貼替換重啟就算完成更新了

沒學過Python隨便瞎寫寫的,變數名啊規範啥的就無視吧....

import sqlite3import tracebackimport osimport os.pathfrom shutil import copy## 這個工具的作用是根據SVN的檔案變更記錄,自動去Tomcat目錄複寫變更class方便製作更新包# 只支援Eclipse項目(不同IDE建立的專案檔目錄結構不同)#def addLog(oldlog,logtext):    print(logtext)    return oldlog+"\n"+logtextdef 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 Trueprint("歡迎使用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()

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.