2014-01-13 47 views
2

我們通過本地Nexus存儲庫使用Maven。不幸的是,查詢新版本時,我們得到了一些誤報:Nexus中特定的Maven工件如何被封鎖

commons-collections:commons-collections ............ 3.2.1 -> 20040616 
org.hibernate:hibernate-entitymanager ..... 4.1.9.Final -> 4.3.0.Beta1 

首先是一個版本,是一個古老但有一個不正確的命名方案。第二個實際上只是一個測試版本(我們通常不會得到這些,但有些似乎溜走了)。現在的問題是:如何排除這些版本,這些版本不在​​我們的存儲庫中,而是來自我們的Nexus指向的其中一個版本庫?

我試過路由,但是我弄錯了,或者它不能阻止特定版本,只能使用所有版本的完整工件。我在文檔中看到採購,但它看起來非常複雜,我不敢嘗試。

+0

您是否使用'versions-maven-plugin'來檢查新版本或其他內容? – user944849

+0

以上是'mvn版本:display-dependency-updates'的輸出。 –

+0

好的,那你確實在使用'versions-maven-plugin'。我會在下面提供一個建議。 – user944849

回答

4

您可以在項目的POM(或公司父母的某個地方)中配置versions-maven-plugin,以使用規則文件告訴插件忽略哪些版本。

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>versions-maven-plugin</artifactId> 
    <version>2.1</version> 
    <configuration> 
    <!-- some location that makes sense for your company/project --> 
    <rulesUri>http://host.company.com/maven-config/maven-version2-rules.xml</rulesUri> 
    </configuration> 
</plugin> 

示例規則文件如下所示。我會忽略commons-logging插件的「99.0-does-exist」版本。

<ruleset xmlns="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0 
    http://mojo.codehaus.org/versions-maven-plugin/xsd/rule-2.0.0.xsd"> 
    <rules> 
    <rule groupId="commons-logging" artifactId="commons-logging"> 
     <ignoreVersions> 
     <ignoreVersion>99.0-does-not-exist</ignoreVersion> 
     </ignoreVersions> 
    </rule> 
    </rules> 
</ruleset> 

您可以添加配置,以在全球範圍忽略其他的版本,而不是每個神器像我一樣在這裏,和正則表達式可以被使用。更多信息請參見plugin documentation

+1

哇,我問了一個Nexus的問題,並得到了一個Maven的答案!然後再一次,它完全符合我的要求,並且使用父POM,它也可以變得非常全球化。 –