2013-12-10 97 views
3

我在公司内部网上有一个项目(阅读 - 没有外部互联网访问)。我有一台运行Artifactory的服务器,其中包含所有必需的Maven工件。我有一个settings.xml文件,指向正在运行的Artifactory服务器。一切都很开心,maven可以下载依赖关系,直到在POM文件中指定存储库的工件(在我的例子中是org/eclipse/jetty/jetty-project/7.5.4.v20111024/jetty-project-7.5.4.v20111024.pom) 。然后maven尝试从POM文件中指定的回购库中加载其余的依赖项,而不是从Artifactory中加载。这打破了构建。你如何配置maven忽略在POM文件中指定的存储库?如何配置maven忽略在POM文件中指定的存储库?

感谢,

弥敦道

回答

2

作为一种变通方法,在你settings.xml定义另一个仓库用相同的ID(是否oss.sonatype.org,在jetty-parent:19定义,这就是问题所在?),并在您的回购点它。 Maven将使用该定义来支持pom中的那个。

对Maven(MNG-3056)提出了一个未解决的问题,以便对其进行配置,以便仅使用您的回购;一般来说,如果你有一个本地存储库,那将是你想要的行为。

+0

感谢您的解决方法和链接! –

1

这是一个很好的答案乔。谢谢。我一直在寻找它。

我只是举了一个例子,其中我和Nathan有同样的问题。

我使用Maven企业存储库(Nexus或Artifactory),我位于代理之后,这意味着我不能从我的任何其他存储库直接下载(并且不想)。
Jasper的报告net.sf.jasperreports:jasperreports:6.2.0在它的pom中定义了一些存储库。

<groupId>net.sf.jasperreports</groupId> 
<artifactId>jasperreports</artifactId> 
<version>6.2.0</version> 
... 
<repositories> 
    <repository> 
     <id>jasperreports</id> 
     <url>http://jasperreports.sourceforge.net/maven2</url> 
    </repository> 
    <repository> 
     <id>jaspersoft-third-party</id> 
     <url>http://jaspersoft.artifactoryonline.com/jaspersoft/third-party-ce-artifacts/</url> 
    </repository> 
</repositories> 

这会导致以下情况例外:

C:\my-project>mvn verify 
[INFO] Scanning for projects... 

[INFO] Building my-project 1.0.0-SNAPSHOT 
[INFO] 
Downloading: http://mynexus/nexus/content/groups/ch-public/com/lowagie/itext/2.1.7.js4/itext-2.1.7.js4.pom 
Downloading: http://jasperreports.sourceforge.net/maven2/com/lowagie/itext/2.1.7.js4/itext-2.1.7.js4.pom 
Downloading: http://jaspersoft.artifactoryonline.com/jaspersoft/third-party-ce-artifacts/com/lowagie/itext/2.1.7.js4/itext-2.1.7.js4.pom 
[INFO] BUILD FAILURE 
[INFO] Could not resolve dependencies for project ... : 
Failed to collect dependencies at net.sf.jasperreports:jasperreports:jar:6.2.0 -> 
com.lowagie:itext:jar:2.1.7.js4: Failed to read artifact descriptor for com.lowagie:itext:jar:2.1.7.js4: 
Could not transfer artifact com.lowagie:itext:pom:2.1.7.js4 
from/to jasperreports (http://jasperreports.sourceforge.net/maven2): 
Connect to jasperreports.sourceforge.net:80 [jasperreports.sourceforge.net/216.34.181.96] 
failed: Connection timed out: 

如由Joe描述的解决方案是: 在全球的settings.xml(C:/maven-installation/conf/settings.xml)或私人settings.xml中(〜/ .m2目录/ settings.xml中),添加以下文件:

<profiles> 
    <profile> 
     <id>ignore-repositories</id> 
     <activation> 
      <activeByDefault>false</activeByDefault> 
     </activation> 
     <repositories> 
      <repository> 
       <id>jasperreports</id> 
       <url>http://mynexus/nexus/content/groups/ch-public/ 
       </url> 
       <releases> 
        <enabled>true</enabled> 
       </releases> 
       <snapshots> 
        <enabled>false</enabled> 
       </snapshots> 
      </repository> 
      <repository> 
       <id>jaspersoft-third-party</id> 
       <url>http://mynexus/nexus/content/groups/ch-public/ 
       </url> 
       <releases> 
        <enabled>true</enabled> 
       </releases> 
       <snapshots> 
        <enabled>false</enabled> 
       </snapshots> 
      </repository> 
     </repositories> 
    </profile> 
</profiles> 

重要:在配置文件的存储库id(碧玉报告,jaspersoft第三方)完全匹配在pom.xml中使用的存储库的ID - 在这种情况下,net.sf.jasperreports的pom.xml:jasperreports:6.2.0

不要忘记添加将“外部”存储库添加到Maven Enterprise Repository的“代理”列表中