2009-10-08 125 views
4

我有一個Java項目X對項目Y.Maven的依賴版本和java.lang.NoClassDefFoundError

我修改Y和構建X,Y與Maven工具,然後乳寧X的依賴(在POM文件)(在JBoss上)沒有問題。

當我在Y中添加新類,然後使用Maven構建(沒有問題),然後運行X時,它爲新類引發java.lang.NoClassDefFoundError

我認爲它的Maven依賴版本或類似的東西...我主要搜索谷歌,但沒有影響...如何解決這個問題?

+0

我注意到生成的x.jar沒有包含y.jar的「lib」目錄...我手動添加了這個...並且運行正常......但是現在,如何讓Maven自動執行此操作(如果這是一個正確的解決方案)? – Moro 2009-10-14 17:37:42

回答

0

好的,對於遲到的信息抱歉。

X包是ejb,所以X.jar沒有lib目錄。

然後Y.jar應該放在Jboss/server/default/lib中,它工作正常。

Thanx所有。

0

您是否在添加新類後在Y上運行了mvn install

+0

是的,我做到了與MVN安裝 – Moro 2009-10-08 16:57:35

0

您是否安裝/部署新版本的Y,升級X對新版本Y的依賴關係,並重新構建X?

+0

在Y POM具有版本 1.0和X POM具有相關性爲ŸŸ提供 1.0 Moro 2009-10-08 17:02:15

0

您是否在項目Y之前嘗試過mvn clean

+0

是乾淨然後安裝Y ...和clean然後打包爲X – Moro 2009-10-08 17:03:01

0

儘管IDE插件(如m2eclipse)也會解析工作區內項目的依賴項,Maven可以解決本地和遠程存儲庫的依賴關係。如果您沒有這樣的插件,則需要將工件Y安裝到本地存儲庫或將其部署到遠程存儲庫,以便您和您的同事可以在Maven識別出構建項目時進行更改之前訪問它十

workspace resolution screenshot http://docs.codehaus.org/download/attachments/11403480/project-properties.png

如果這兩個項目是緊密相關的,你可以考慮創建一個multi-module build使項目X和Y在同一時間建成。

+0

1.它在存儲庫中,這樣我使用安裝命令2.它已經是一個多模塊項目......並且我試圖在父項目中構建它......但是同樣的事情 – Moro 2009-10-08 17:07:28

7

摩洛,你在評論中寫道,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範圍嗎?

+0

剛剛使用 \t \t \t Ÿ \t \t 1.0快照 \t ,但它並沒有把lib目錄下,而不是運行 – Moro 2009-10-08 17:52:04

+0

那是因爲你需要在Y中的VERSIONNUMBER改爲1.0,快照,然後運行mvn安裝。之後,正確的依賴關係可用 – Salandur 2009-10-08 18:04:30

+0

沒有人,我已經做了 – Moro 2009-10-08 18:10:25