2

我正在使用安装在本地计算机上的自己版本的 Nexus Web 应用程序存储库。我只为 Nexus 配置了一个存储库,即我存储快照的存储库:

http://localhost:8081/nexus/content/repositories/MySnapshots/

请注意,在安装 Nexus 之后,我删除了所有默认存储库并添加了我自己的存储库。(也许这是个坏主意?)

当我执行 mvn clean install 时,我注意到一些第 3 方工件是直接从远程存储库下载的。例如,这是构建的输出行之一:

Downloading: http://repo.maven.apache.org/maven2/com/sun/org/apache/xml/internal/resolver/...

奇怪的是,我看到其他工件正在通过我当地的 Nexus 最终到达工件:

Downloading: http://localhost:8081/nexus/content/repositories/MySnapshots/org/apache/maven/wagon/wagon-provider-api...

请注意,下载 url 的第一部分是我的本地存储库,但MySnapshots之后的所有内容都来自 apache.org。

这几乎就像我的 Nexus 存储库充当 maven.apache.org 的代理,用于下载一些工件,但对于其他人来说,它直接进入源代码。

谁能告诉我为什么会这样?

如果我的所有构建一直都成功,我不会为此烦恼太多,但有时,当我编译大型项目时,由于无法找到工件而导致构建失败。

例如,当我尝试构建另一个依赖于 eclipse jdt 的项目时,我收到以下错误:

Downloading: http://localhost:8081/nexus/content/repositories/MySnapshots/eclipse/jdt/core/eclipse.jdt.core
Could not find artifact eclipse.jdt.core:eclipse.jdt.core

我不确定这是否意味着我的 Nexus 配置不正确,或者是否真的没有工件 eclipse.jdt.com。如果下载没有通过我的本地 Nexus 存储库,我会调查 pom/settings.xml 文件。相反,这让我想知道这是否是由于我的 Nexus 配置。

如果您想查看我的 Maven 的 settings.xml 和我正在构建的项目的 pom 文件,您可以在此处查看它们:

设置.xml:http: //pastebin.com/NvLr5bEA

pom.xml: http: //pastebin.com/PJ0P3RaK

4

2 回答 2

2

如果您想像往常一样使用本地 nexus 作为代理,则必须像这样配置 settings.xml:

 <mirrors>
    <mirror>
      <!--This sends everything else to /public -->
      <id>nexus</id>
      <mirrorOf>*</mirrorOf>
      <url>http://localhost:8081/nexus/content/groups/public</url>
    </mirror>
  </mirrors>
  <profiles>
    <profile>
      <id>nexus</id>
      <!--Enable snapshots for the built in central repo to direct -->
      <!--all requests to nexus via the mirror -->
      <repositories>
        <repository>
          <id>central</id>
          <url>http://central</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </repository>
      </repositories>
     <pluginRepositories>
        <pluginRepository>
          <id>central</id>
          <url>http://central</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>
  <activeProfiles>
    <!--make the profile active all the time -->
    <activeProfile>nexus</activeProfile>
  </activeProfiles>

棘手的事情是镜像事情,它将每次调用重新路由到配置的关系实例。您提到的诸如 Eclipse 部分之类的东西可能会出现问题,因为只有少数工件可以通过 maven Central 获得。此外,您应该保留 maven central、发布存储库和快照存储库等默认值不变,因为这些是您需要的存储库。

于 2013-08-19T16:51:07.507 回答
0

我不认为它是代理问题,根据我对从 Maven Central Repo 下载的第一种情况的理解,您的 nexus 存储库中可能没有相同的工件,这就是它要去 Maven Central Repo 的原因.

在第二种情况下,它在您的关系中可用,因此反应器没有尝试从 Maven 中央存储库下载它。

于 2013-08-16T19:08:03.310 回答