我面臨以下問題:我的webapp中有一個模塊需要jaxb 1.x,另一個模塊需要jaxb 2.x.第一個模塊不適用於新版本的jaxb,而相反。我如何在一個項目中使用這兩個罐子? 謝謝。java:在一個webapp中使用兩個版本的相同的庫
回答
你有一個jar-hell問題。一般來說,在普通的Java環境中,解決這個問題是不可能的。您必須使用OSGI強制模塊化到您的項目中。起始點:http://www.osgi.org/About/HowOSGi
對於常規應用程序,通常使用不同的版本使用不同的軟件包名稱。如果是這種情況,您可以立即使用它們,而不會出現問題。但是,如果它們相同,則可以使用jarjar來重命名包。
但是,由於您使用的是Web容器,因此每個應用程序應該使用您部署的版本,而不是其他版本。即Web容器爲您工作。
OSGi是其中更明確管理版本,並讓您對這些問題更多的控制(不過我相信你需要它只是爲這個)
是的,我可以將程序包重命名爲jaxb 2.1 jar,但我不想這樣做。這是因爲解決方案是「髒」的。 OSGi是的,但只有當沒有其他解決方案...嗯....重命名似乎越來越合適) – Nick
這是重命名功能添加了什麼。我已經看到了一個包含四個不同版本的Xerces的jar,您可以在運行時選擇它。 :-P –
由於薩滿說是IMPOSIBLE來解決此問題的另一個容器。
讓我們看看:servlet容器JRE只有一個類加載器,這個類加載器可以從jaxb或其他類加載和使用一個類,但不能同時給你一個classdefnotfound異常或類似的東西。
你不能直接解決這個問題: 你可以得到代碼(是開源的)並將一個包改爲另一個名稱,這樣類加載器就可以同時使用這兩個包。我不建議你這個解決方案,是一個不好的解決方案。
更好的是,你遷移到使用最現代化的API代碼(JAXB 2)
不能這樣做。因爲沒有所有的來源。有沒有辦法自己加載新的類?例如,我把所有的邏輯和依賴關係放到一個jar中,並加載它的主類。然後我稱之爲商業方法。如果我這樣做會怎樣? – Nick
- 1. 同一個庫的兩個版本
- 2. 使用同一個庫的兩個版本
- 3. 在一個應用程序中具有相同包名的相同庫的兩個版本
- 4. 在同一頁面中使用兩個不同的jQuery版本
- 5. 在同一個過程中使用不同版本的python庫
- 6. maven - 可以兩個模塊使用不同版本的相同的庫
- 7. 使用相同包不同版本的作曲家兩個包
- 8. 使用不同版本的相同庫
- 9. 在一個Python項目中使用一個庫的兩個版本
- 10. 同時運行兩個版本的java
- 11. 在Android Studio中開發相同應用的兩個版本
- 12. 如何在同一個java webapp上使用不同的子域
- 13. 兩個版本相同的電子郵件的使用class.phpmailer.php
- 14. 在一個Java應用程序中需要兩個不同版本的JAR
- 15. 我需要在同一個html中使用兩個不同版本的jquery
- 16. SBT - 在單個項目中使用兩個版本的庫?
- 17. 不同項目中的兩個版本的相同的DLL
- 18. 合併同一個git倉庫的兩個版本
- 19. Java:在兩個線程中加載相同的動態庫(兩個線程都在同一個JVM中)
- 20. TeamCity兩個版本使用相同的結帳目錄
- 21. 如何使Android Studio中的兩個不同模塊通過Gradle使用同一個庫的不同版本
- 22. 瀏覽同一存儲庫的兩個不同版本
- 23. 在同一個設備上安裝同一個應用的兩個版本
- 24. 無法在TFS中檢查兩個版本的相同代碼
- 25. 如何在一個版本中創建兩個不同的RPM?
- 26. 我如何使用JQUERY庫的兩個不同版本
- 27. 使用不同libstdC++版本的兩個靜態庫
- 28. 在單一應用程序中配置相同jar的兩個版本
- 29. 如何在java maven項目中從兩個不同版本的jar中加載兩個版本的類?
- 30. 如何在同一個項目中使用AFNetworking的兩個版本
你能描述一下你說 '在我的web應用程序模塊' 的意思。例如,他們是分開的ejb模塊,還是他們只是分開的層共享相同的類路徑?另外,你能列出哪些libs依賴於JAXB jar嗎? –
你可以將模塊看作一個lib(它更復雜,但最後我有通過classpath鏈接到我的webapp的jar文件)。第一個是docx4j.jar,第二個是與WebService一起工作的第三方助手。我不能更改第三方幫助程序和docx4j.jar – Nick