0

我正在使用 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. 它将首先查看本地 repo ( .m2/repository )。

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

<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>
4

2 回答 2

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。

至于 Proxy,我们有一个组织代理,但是 Nexus 在 org 中(它有代理配置为允许访问外部世界),所以 maven 不需要这个特定的配置。

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

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

于 2013-01-06T15:49:03.747 回答
0

将 Maven 与 Nexus 结合使用的正确设置记录在 Repository Management with Nexus 一书中。示例 settings.xml 在这里。阅读描述并注意您需要为中央存储库添加覆盖以启用快照。

完成此操作后,您无需在 settings.xml 中配置代理,因为它可以在您的本地网络中使用而无需代理(通常)。相反,您可以在 Nexus 中配置代理设置,以便它反过来可以访问您正在代理的 Central 等存储库。全局代理配置在此处记录,如果需要,您还可以为每个代理存储库配置细节,例如,如果您需要代理存储库的用户名/密码,因为它是私有的..

于 2013-01-06T18:20:50.783 回答