2013-08-21 52 views
0

我們使用maven編譯Adobe CQ項目(服務,taglib,視圖,內容等)。在某個時間點,我們引入了以下相關性:org.eclipse.core依賴到org.eclipse.runtime突然改變

 <dependency> 
      <groupId>org.eclipse.core</groupId> 
      <artifactId>resources</artifactId> 
      <version>3.3.0-v20070604</version> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.equinox</groupId> 
      <artifactId>registry</artifactId> 
      <version>3.3.0-v20070522</version> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.core</groupId> 
      <artifactId>jobs</artifactId> 
      <version>3.3.0-v20070423</version> 
     </dependency> 

這導致了以下依賴關係,例如對於org.eclipse.resources(:樹-Dverbose與MVN依賴提取):

[INFO] +- org.eclipse.core:resources:jar:3.3.0-v20070604:compile 
[INFO] | +- org.eclipse.core:expressions:jar:3.3.0-v20070606-0010:compile 
[INFO] | | \- (org.eclipse.core:runtime:jar:3.3.100-v20070530:compile - omitted for duplicate) 
[INFO] | +- org.eclipse.core:filesystem:jar:1.1.0-v20070606:compile 
[INFO] | | +- (org.eclipse.equinox:common:jar:3.3.0-v20070426:compile - omitted for duplicate) 
[INFO] | | +- (org.eclipse.equinox:registry:jar:3.3.0-v20070522:compile - omitted for duplicate) 
[INFO] | | \- (org.eclipse:osgi:jar:3.3.0-v20070530:compile - omitted for duplicate) 
[INFO] | \- org.eclipse.core:runtime:jar:3.3.100-v20070530:compile 
[INFO] |  +- (org.eclipse:osgi:jar:3.8.2.v20130124-134944:compile - omitted for duplicate) 
[INFO] |  +- (org.eclipse.equinox:common:jar:3.3.0-v20070426:compile - omitted for duplicate) 
[INFO] |  +- (org.eclipse.core:jobs:jar:3.3.0-v20070423:compile - omitted for duplicate) 
[INFO] |  +- (org.eclipse.equinox:registry:jar:3.3.1:compile - omitted for duplicate) 
[INFO] |  +- org.eclipse.equinox:preferences:jar:3.2.100-v20070522:compile 
[INFO] |  | \- (org.eclipse.equinox:common:jar:3.3.0-v20070426:compile - omitted for duplicate) 
[INFO] |  +- org.eclipse.core:contenttype:jar:3.2.100-v20070319:compile 
[INFO] |  | +- (org.eclipse.equinox:preferences:jar:3.2.100-v20070522:compile - omitted for duplicate) 
[INFO] |  | +- (org.eclipse.equinox:registry:jar:3.3.1:compile - omitted for duplicate) 
[INFO] |  | \- (org.eclipse.equinox:common:jar:3.3.0-v20070426:compile - omitted for duplicate) 
[INFO] |  \- org.eclipse.equinox:app:jar:1.0.0-v20070606:compile 
[INFO] |  +- (org.eclipse.equinox:registry:jar:3.3.1:compile - omitted for duplicate) 
[INFO] |  \- (org.eclipse.equinox:common:jar:3.3.0-v20070426:compile - omitted for duplicate) 

於是,從2013年8月的19日到8月20日,org.eclipse:OSGi的依賴性突然從3.3變。 0-東西3.8.2-的東西,沒有任何明顯原因(這打破了我們的建設相當nastily):

[INFO] +- org.eclipse.core:resources:jar:3.3.0-v20070604:compile 
[INFO] | +- org.eclipse.core:expressions:jar:3.3.0-v20070606-0010:compile 
[INFO] | | \- (org.eclipse.core:runtime:jar:3.3.100-v20070530:compile - omitted for duplicate) 
[INFO] | +- org.eclipse.core:filesystem:jar:1.1.0-v20070606:compile 
[INFO] | | +- (org.eclipse.equinox:common:jar:3.3.0-v20070426:compile - omitted for duplicate) 
[INFO] | | +- (org.eclipse.equinox:registry:jar:3.3.0-v20070522:compile - omitted for duplicate) 
[INFO] | | \- org.eclipse:osgi:jar:3.8.2.v20130124-134944:compile 
[INFO] | \- org.eclipse.core:runtime:jar:3.3.100-v20070530:compile 
[INFO] |  +- (org.eclipse:osgi:jar:3.8.2.v20130124-134944:compile - omitted for duplicate) 
[INFO] |  +- (org.eclipse.equinox:common:jar:3.3.0-v20070426:compile - omitted for duplicate) 
[INFO] |  +- (org.eclipse.core:jobs:jar:3.3.0-v20070423:compile - omitted for duplicate) 
[INFO] |  +- (org.eclipse.equinox:registry:jar:3.3.1:compile - omitted for duplicate) 
[INFO] |  +- org.eclipse.equinox:preferences:jar:3.2.100-v20070522:compile 
[INFO] |  | \- (org.eclipse.equinox:common:jar:3.3.0-v20070426:compile - omitted for duplicate) 
[INFO] |  +- org.eclipse.core:contenttype:jar:3.2.100-v20070319:compile 
[INFO] |  | +- (org.eclipse.equinox:preferences:jar:3.2.100-v20070522:compile - omitted for duplicate) 
[INFO] |  | +- (org.eclipse.equinox:registry:jar:3.3.1:compile - omitted for duplicate) 
[INFO] |  | \- (org.eclipse.equinox:common:jar:3.3.0-v20070426:compile - omitted for duplicate) 
[INFO] |  \- org.eclipse.equinox:app:jar:1.0.0-v20070606:compile 
[INFO] |  +- (org.eclipse.equinox:registry:jar:3.3.1:compile - omitted for duplicate) 
[INFO] |  \- (org.eclipse.equinox:common:jar:3.3.0-v20070426:compile - omitted for duplicate) 

我們能夠通過明確地將依賴於解決此問題:

<dependency> 
     <groupId>org.eclipse</groupId> 
     <artifactId>osgi</artifactId> 
     <version>3.3.0-v20070530</version> 
    </dependency> 

但是,我們仍然沒有任何線索,爲什麼依賴關係發生了變化。有人知道原因或遇到同樣的問題嗎?

+0

您使用的是哪個存儲庫? –

+0

我們使用的是Atlassian存儲庫https://repository.atlassian.com/maven2/,但在依賴項更改後將其更改爲 https://maven.atlassian.com/content/groups/public/因爲我們注意到,第一個存儲庫不再可用。 – Bertolt

+0

你在使用版本範圍嗎? –

回答

0

在深入研究pom文件,.m2/repository/repository.xml和幾個maven-metadata.xml文件後,我找到了根本原因。

maven-metadata.xml file in Maven repository http://repo.adobe.com for org.eclipse.osgi似乎在8月20日發生了變化。出於某種原因,這個文件的日期是現在恢復到七月11日,但這種變化仍然是:

元數據文件從

<metadata> 
<groupId>org.eclipse</groupId> 
<artifactId>osgi</artifactId> 
<version>3.3.0-v20070530</version> 
<versioning> 
<versions> 
... 
</versions> 
<lastUpdated>20071127073207</lastUpdated> 
</versioning> 
</metadata> 

改爲

<metadata modelVersion="1.1.0"> 
<groupId>org.eclipse</groupId> 
<artifactId>osgi</artifactId> 
<version>3.3.0-v20070530</version> 
<versioning> 
<latest>3.8.2.v20130124-134944</latest> 
<release>3.8.2.v20130124-134944</release> 
<versions> 
... 
</versions> 
<lastUpdated>20130711152942</lastUpdated> 
</versioning> 
</metadata> 

顯然,最新版在改變之後提供,現在已經是3.8.2而不是3.3.0了。

0

該問題可能是由版本範圍引起的。這些範圍甚至不必用於Eclipse工件。

假設您依賴於[1,2]和1.1,並且1.2可用。在某個時刻,添加1.3具有不同的依賴關係。如果它發現多個groupId:artifactId具有不同的版本,那麼它會選擇它找到的第一個。 Maven遵循廣度優先策略來查找依賴關係,以便您可以在頂級域名中覆蓋它。這當然是非常模糊和容易出錯的。更好的方法是在一個pom中指定所有的應用程序依賴關係,這樣可以確保有效的版本。