2013-10-07 32 views
0

我目前正在編譯Web應用程序中使用的第三方庫列表。該應用程序部署在tomcat中。我想知道哪個第三方罐子實際上必須或應該包含在發行版中。特別是,我目前想知道如何最好地使用javax-libraries。例如,我會假定javax.annotation-3.1.1.jar可以以某種標準方式使用,例如將其作爲擴展下載,而不用將其包含到我自己的軟件分發中。但是,我將它作爲jaxws-api的一個傳遞依賴項包含在我需要的Web服務中,因此它包含在應用程序的lib目錄中。 我知道我可以使用擴展列表清單條目來導致目標機器下載並安裝這樣的罐子。但是,它們對於同一臺機器上的其他應用程序也是可見的,這可能需要相同庫的其他版本。罐的重新分配

所以,我對第三方庫的一些問題,我將非常高興,如果有人可以給我一些提示:

什麼是使用第三方庫的最佳做法?

javax-libraries是否有一些最佳實踐?

可以並且應該避免重新分配而不會給安裝應用程序的人造成很大負擔?

回答

0

我不得不承認,在這裏我還沒有理解「重新分配」的概念,也許你正在使用一些具體的應用服務器術語,所以我會盡量在這裏提供一個共同的答案,假設你有一場戰爭。

WAR(代表Web Archive)應包含應用程序使用的所有第三方。 這些駐留在WEB-INF/lib文件夾中。

現在,每個Java EE服務器都應該「理解」javax庫,因爲它包含相關的接口。 「javax」庫通常提供接口,而與這些接口配合使用的實現/代碼由應用服務器開發人員提供。例如,對於Servlet技術,Tomcat(或任何Web服務器的名稱)將在其內部庫中包含HttpServlet抽象類,它將掃描您的戰爭並找到您在哪裏實現/擴展它,這是它如何識別您的servlet其實。

現在,您不應該將servlet-api jar包含到您的戰爭中,因爲它已經存在於應用程序服務器中。

如果你使用像maven這樣的構建工具,他們允許構建你的戰爭,這樣一些第三方將被用於編譯,但不會被打包成戰爭。

我不明白爲什麼安裝該應用程序非常困難 - 在最簡單的情況下 - 您將戰爭引入Web服務器,就是這樣。

希望這會有所幫助

+0

我的確在使用Maven,並且包含servlet-api和作用域「provided」。另外,我可以在Tomcat的lib文件夾中找到Annotations-api.jar以及其他一些jar文件。但是,這到目前爲止還沒有包含所有的javax庫。例如,jaxws-api不包含在該文件夾中。安裝,順便說一句,沒問題。我只考慮我必須打包哪些罐子,以及哪些罐子可以出於許可原因而出現。 – avidD