本地Nexus存储库代理一些Maven工件的代理

时间:2013-08-16 18:31:14

标签: maven repository nexus downloading artifacts

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

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

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

当我进行mvn clean安装时,我注意到一些第三方工件直接从远程存储库下载。例如,以下是构建中的一个输出行:

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

请注意下载网址的第一部分是我的本地存储库,但 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和我的pom文件的settings.xml,您可以在这里查看它们:

settings.xml:http://pastebin.com/NvLr5bEA

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

2 个答案:

答案 0 :(得分: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>

棘手的是镜像的东西,它重新路由了对配置的nexus实例的每次调用。 你提到的像eclipse部分的东西可能会有问题,因为只有少数工件可以通过maven central获得。此外,您应该保留maven central,release repository和snapshots repository等默认值,因为这些是您需要的存储库。

答案 1 :(得分:0)

我不认为它是代理问题,直到我从Maven Central Repo下载的第一个案例的理解,你的nexus存储库中可能没有相同的工件,这就是为什么它会Maven Central Repo。

在第二种情况下,它可以在您的nexus中使用,因此反应堆没有尝试从Maven Central Repo下载它。