maven为某些依赖设置另一个存储库

时间:2013-06-10 07:59:26

标签: maven-2 dependencies dependency-management repository

我有Maven2项目。除了一个之外的所有依赖项都从公共存储库http://repo.maven.apache.org/maven2/下载。

但我需要从内部公司的存储库下载1个依赖项(我们使用Sonatype Nexus存储此依赖项)。

另外,我不想在我的内部仓库上创建公共仓库的完整副本。

此刻我在pom.xml:

<url>http://maven.apache.org</url>

<repositories>
    <repository>
        <id>thirdparty</id>
        <url>http://<my_nexus_server_ip>:8081/nexus/content/repositories/thirdparty</url>
    </repository>
</repositories>

因此,在构建过程中,我会看到很多垃圾邮件(在这种情况下,第一行是垃圾邮件):

Downloading: http://<my_nexus_server_ip>:8081/nexus/content/repositories/thirdparty/ant/ant/1.6.5/ant-1.6.5.pom
Downloading: http://repo.maven.apache.org/maven2/ant/ant/1.6.5/ant-1.6.5.pom
Downloaded: http://repo.maven.apache.org/maven2/ant/ant/1.6.5/ant-1.6.5.pom (861 B at 3.2 KB/sec)  

我想明确指出Maven对于它必须使用内部存储库的依赖关系,并忽略其他依赖关系(并指出其他依赖关系Maven2必须使用公共存储库)。

你能帮忙在Maven中实现这样的行为吗?

提前致谢!

2 个答案:

答案 0 :(得分:1)

根据this answer,无法为某些声明的依赖项设置特定的存储库。

答案 1 :(得分:-1)

您需要在Nexus中配置公共存储库组,以便在Maven构建中使用唯一的一个,如下所示:

<settings>
  <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>
</settings>

您必须在nexus中设置一个单独的存储库,就像您描述了一个名为ThirdParty的存储库,并将此存储库添加到公共存储库组的配置中。此外,您需要将一个依赖项上载到该特定存储库中。除此之外,您还必须使用发布 SNAPSHOT 存储库,这意味着您需要在公司主pom文件中相应地配置您的distributionManagement。