我有一個Java項目X對項目Y.Maven的依賴版本和java.lang.NoClassDefFoundError
我修改Y和構建X,Y與Maven工具,然後乳寧X的依賴(在POM文件)(在JBoss上)沒有問題。
當我在Y中添加新類,然後使用Maven構建(沒有問題),然後運行X時,它爲新類引發java.lang.NoClassDefFoundError
。
我認爲它的Maven依賴版本或類似的東西...我主要搜索谷歌,但沒有影響...如何解決這個問題?
我有一個Java項目X對項目Y.Maven的依賴版本和java.lang.NoClassDefFoundError
我修改Y和構建X,Y與Maven工具,然後乳寧X的依賴(在POM文件)(在JBoss上)沒有問題。
當我在Y中添加新類,然後使用Maven構建(沒有問題),然後運行X時,它爲新類引發java.lang.NoClassDefFoundError
。
我認爲它的Maven依賴版本或類似的東西...我主要搜索谷歌,但沒有影響...如何解決這個問題?
好的,對於遲到的信息抱歉。
X包是ejb,所以X.jar沒有lib目錄。
然後Y.jar應該放在Jboss/server/default/lib中,它工作正常。
Thanx所有。
您是否安裝/部署新版本的Y,升級X對新版本Y的依賴關係,並重新構建X?
在Y POM具有版本
儘管IDE插件(如m2eclipse)也會解析工作區內項目的依賴項,Maven可以解決本地和遠程存儲庫的依賴關係。如果您沒有這樣的插件,則需要將工件Y安裝到本地存儲庫或將其部署到遠程存儲庫,以便您和您的同事可以在Maven識別出構建項目時進行更改之前訪問它十
如果這兩個項目是緊密相關的,你可以考慮創建一個multi-module build使項目X和Y在同一時間建成。
1.它在存儲庫中,這樣我使用安裝命令2.它已經是一個多模塊項目......並且我試圖在父項目中構建它......但是同樣的事情 – Moro 2009-10-08 17:07:28
摩洛,你在評論中寫道,X具有以下依賴聲明:
<dependency>
<groupId>Y</groupId>
<artifactId>Y</artifactId>
<scope>provided</scope>
<version>1.0</version>
</dependency>
第一點。您在此處使用「固定」版本(與「SNAPSHOT
」相反)。當使用SNAPSHOT
時,maven會自動獲取最新的SNAPSHOT
,每次您建立。另一方面,當你使用1.0時,一旦maven下載了這個神器,它永遠不會試圖獲得一個新的1.0。所以,你應該增加Y的版本,或者,如果Y正在積極開發(增強,錯誤修復等),你應該真的使用SNAPSHOT
。 約SNAPSHOT
欲瞭解更多信息,請Sonatype的書的章節9.3.1.2. SNAPSHOT Versions:
爲什麼你會使用嗎? SNAPSHOT 版本用於 積極開發的項目。如果你的項目 依賴於軟件組件 正在積極開發中,你可以 依賴於一個快照版本,並 Maven會定期嘗試 從 庫下載最新的快照,當你運行構建。 同樣,如果您的 系統的下一個版本將具有版本 「1.4」,那麼您的項目將具有 版本「1.4-SNAPSHOT」,直到它正式發佈爲 。
第二點。您正在使用provided
範圍。據章 9.4.1. Dependency Scope:當你 期望JDK或 容器爲他們提供
provided
依賴性使用。例如,如果你 開發Web應用程序,你 需要提供 了Servlet API的類路徑編譯編譯 servlet的,但你不會想 包括在 打包WAR在Servlet API; Servlet API JAR是由您的應用程序服務器或 servlet容器提供的 。provided
編譯類路徑(不是運行時)的 上存在依賴關係。 它們不是傳遞性的,也不是 打包。
這真的是你想要的嗎?你如何在JBoss上部署X和Y?你不應該使用默認的compile
範圍嗎?
我注意到生成的x.jar沒有包含y.jar的「lib」目錄...我手動添加了這個...並且運行正常......但是現在,如何讓Maven自動執行此操作(如果這是一個正確的解決方案)? – Moro 2009-10-14 17:37:42