maven存储库代理混淆

时间:2013-01-06 15:33:59

标签: maven settings nexus

我正在使用maven 3.0(使用nexus设置)来构建我的项目并且正在构建失败:

Caused by: org.sonatype.aether.transfer.ArtifactNotFoundException: Could not find artifact directory:apacheds-core:jar:${apacheds_version} in central (http://localhost:8081/nexus/content/repositories/central)
at org.sonatype.aether.connector.wagon.WagonRepositoryConnector$4.wrap(WagonRepositoryConnector.java:945)
at org.sonatype.aether.connector.wagon.WagonRepositoryConnector$4.wrap(WagonRepositoryConnector.java:940)

我的基本困惑是:当maven在pom.xml中看到依赖关系时,如何在远程存储库中查找工件

我目前的理解是:

  1. 首先查看本地仓库(.m2 / repository)。

  2. 如果在那里找到,那么它将尝试搜索存储库标记下的settings.xml中指定的存储库。 问题:是否尝试了所有提到的存储库。 还是只是第一个?下面我提到了5个回购:maven一个接一个地搜索所有这些还是第一个?

  3. <repositories> <repository> <id>central</id> <url>http://localhost:8081/nexus/content/repositories/central</url> </repository> <repository> <id>remote</id> <url>http://localhost:8081/nexus/content/repositories/remote-proxy-nexus-central</url> </repository> <repository> <id>thirdParty</id> <url>http://localhost:8081/nexus/content/repositories/thirdparty</url> </repository> <repository> <id>codehaus</id> <url>http://localhost:8081/nexus/content/repositories/codehaus-snapshots</url> </repository> <repository> <id>public</id> <url>http://localhost:8081/nexus/content/groups/public</url> </repository> </repositories>

    我最后的困惑是关于settings.xml中的代理部分。这些地点是什么:

     <proxy>
      <id>remote-proxy-nexus-central</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>repo1.maven.org/maven2</host>
      <port>8080</port>
    
    </proxy>
    

2 个答案:

答案 0 :(得分:1)

我可以告诉您我们使用本地Nexus并让所有用户在他们的settings.xml中都有以下内容:

<mirror>
    <id>our-mirror</id>
    <name>Org Public Mirror</name>
    <url>http://host/nexus/content/groups/public</url>
    <mirrorOf>*</mirrorOf>
</mirror>

这会导致maven的任何调用都转到Nexus获取依赖关系。你是对的maven第一次看当地的.m2。

Nexus代理许多存储库并且具有所有存储库的联合(对于调用它的maven进程)。 这意味着开发人员的本地maven只知道单个存储库:Nexus。 Nexus将在其代理/托管存储库中提供所有必需的依赖项ID。

至于代理,我们有一个组织代理,但Nexus在组织中(它配置了允许访问外部世界的代理),因此maven不需要这种特定的配置。

我希望这能为您提供一些入门信息。

我强烈建议您查看Nexus / Maven相关配置:http://www.sonatype.org/

答案 1 :(得分:0)

在使用Nexus进行存储库管理一书中记录了使用Maven和Nexus的正确设置。示例settings.xml是here。阅读说明并注意您需要添加中央存储库的覆盖以启用快照。

完成后,您没有在settings.xml中配置代理,因为它将在没有代理的本地网络中可用(通常)。而是在Nexus中配置代理设置,以便它可以转到您正在代理的中央存储库。全局代理配置已记录here,如果需要,您还可以配置每个代理存储库的详细信息,例如如果您需要用于代理的存储库的用户名/密码,因为它是私有的..