2013-05-14 19 views
0

如果庫聲明提供依賴於例如servlet-api使用v3.0.1;用戶是否可以使用版本2.5作爲他們的庫,這將用於第三方Web應用程序?在庫中提供依賴項,使用項目中的以前版本

換句話說:

mylib (srv 3.0.1) <-- some_framework(srv 2.5) <-- user_webapp (tomcat 6 or 7) 

此外:V2.5被聲明爲的javax.servlet:servlet的API:2.5和版本V3.0.1被聲明爲的javax.servlet:的javax.servlet -api:3.0.1,所以有區別。

對於some_framework指定不同於servlet-api依賴關係(例如2.5)的問題是否與在mylib(例如3.0)中提供的定義不同?我假設範圍是提供(並且僅在編譯時可用),依賴工具(mvn,gradle ...)不會將其下載到some_framework,並且它們已經(並且被允許)手動聲明依賴關係。我只是想知道如何maven會編譯some_framework,其上依賴:2.5或3?)。

+0

Maven足夠靈活,足以支持任何有足夠手動配置的場景,如果這就是您要求的。如果項目** X **依賴於項目** Y **,則在'x/pom.xml'中,我可以聲明它應該忽略(「排除」)Y的給定依賴項。(我會這麼做的是在你的例子中,我是'some_framework'的作者。)這就是說,如果你沒有明確地做到這一點,我猜測Maven會根據兩者來編譯你的項目。 – millimoose 2013-05-14 10:37:29

+0

這就是說你的問題在這裏不是很清楚,涉及到很多相關的概念。就Maven而言,JAR版本衝突不會是一個「問題」,但它可能會導致構建失敗。或者它可能不會,這取決於javac'如何處理類路徑上的重複類(我相信它是「第一個找到的勝利」),以及Maven如何構建類路徑。 – millimoose 2013-05-14 10:39:02

+0

@milimoose我不想手動排除任何東西。假設沒有編譯錯誤(爲什麼它應該是?** some_framework **只使用2.5,所以我們都很好)。你猜Maven會使用兩者進行編譯,或者你知道嗎? :)因爲我假設不同。 – igr 2013-05-14 11:08:37

回答

0

讓我回答我的問題,如[SO]從未與那些刁鑽幫助:)

我創建簡單的Maven項目(將充當some_framework)。它取決於jodd-servletmylib),它具有servlet 3.0.1列爲提供了依賴關係。當我運行時

mvn dependency:resolve 

我在依賴關係列表中看不到servlet。現在,如果當前項目(即some_framework)將servlets v2.5列爲依賴關係;然後如果我再次運行相同的命令,我只能看到依賴於2.5。

因此,我們可能會說提供的依賴不透明或不導出。

相關問題