2013-01-17 36 views
1

我正在客戶站點部署戰爭文件。 War文件包含lib文件夾,其中包含依賴性瓶子例如如何增量修補戰爭文件

/lib/app-01.jar /lib/spring-2.5.1.jar /lib/somefile-1.2.jar ... ...

如果我們需要更新讓說app-01.jar到app-02.jar,有什麼優雅的解決方案嗎?這些依賴jar如何作爲行業標準打包到WAR文件中?

打包那些沒有版本號的依賴瓶是否好主意? 例如

/lib/app.jar /lib/spring.jar /lib/somefile.jar ... ...

編輯注: 其實,戰爭將被部署到的Webshpere中,WebLogic, Tomcat在Windows或Linux平臺上。並且客戶的IT部門參與部署

+0

一個優雅的解決方案,而不是刪除舊的jar文件並添加新的...? – jtahlborn

+0

實際上,在Windows或Linux平臺上將戰爭部署到Webshpere,WebLogic,Tomcat時。並且客戶的IT部門參與部署 – gpa

+0

您是否需要在不停止Web應用程序的情況下執行此操作?這是一個完全不同的問題...... – AngerClown

回答

2

也許最優雅的解決方案就是生成一個新戰爭並部署它。

這裏的原因有:

  • 如果你擔心的正常運行時間,某些應用服務器通過側部署支持的一面。這意味着你可以部署一個新版本並在舊版本的同一時間完成。當沒有人使用它時停止舊的。 (我已經在WebLogic上使用過,就像5年前一樣,所以我認爲這是現在常見的功能)。但是這種功能僅適用於部署新的.WAR版本。

  • 可能WAR是使用Maven,Ant或Gradle生成的,因此更改依賴項版本並執行mvn package通常比解壓縮WAR,更改並重新壓縮它更快,更不容易出錯。

  • 所有應用程序服務器都提供了一個「熱替換」功能,該功能通過刷新類加載器來實現。它的發展很好,但在生產中可能會造成問題(類加載器泄漏可能是常見的,而造成不正確初始化或壞的編程習慣問題,可以給你就像有一個類的兩個版本的意外錯誤)

關於JAR文件名:我建議保留文件名上的版本。 大多數JAR包含META-INF/Manifest.mf中的版本信息。但是,如果出於某種原因,您必須知道哪些版本正在使用您的應用程序...打開每個JAR文件以查看清單中的版本是很多工作。

作爲最終建議。如果你不使用任何自動構建工具...採取一個(看看Gradle,這很好)。更新庫版本通常包括更改構建文件上的版本號並執行類似gradle deploy的操作。即使您不是開發人員,但負責devops的人員,擁有自動構建功能將幫助您進行部署和更新。

0

在Tomcat中,我認爲在文件解壓縮後戰爭並不相關。你可以忽略這場戰爭,並將新的/已更改的文件提取到正確的webapp目錄(與戰爭名稱相同的目錄)。

+0

這也是我的經驗。不過,我認爲當分解的WAR目錄中的某些內容發生更改時,默認配置會重新啓動Web應用程序。這可能不是你想要的生產網站。 – AngerClown