maven存储库镜像

时间:2011-02-11 17:45:27

标签: maven-2

通常,我在Maven settings.xml

中配置了以下镜像
<mirror>
  <id>internal-repository</id>
  <url>http://build.idaho.local/wtp_repository</url>
  <mirrorOf>*</mirrorOf>
</mirror>

我的理解是这个镜像阻止Maven从互联网上下载依赖项,即它只会在这个内部存储库中查找它们。

但是,每当我想要添加一个不在此内部存储库中的依赖项时,我必须注释掉上面的文本并将以下内容添加到项目pom.xml

<repository>
  <id>internal-repository</id>
  <url>http://build.idaho.local/wtp_repository</url>
</repository>

当我进行这些更改时,Maven将检查本地仓库中的依赖项,如果没有找到,则将它们从Internet下载到本地仓库。一旦我拥有了我需要的依赖项,我就会改回配置。

有没有办法获得我想要的行为 - 总是检查内部仓库,然后检查公共(互联网)回购 - 而不必将<repository>添加到每个项目的pom.xml

理想情况下,我想在settings.xml中指定此存储库一次,但似乎您只能在那里配置镜像。

5 个答案:

答案 0 :(得分:14)

您可以尝试将maven配置为仅将镜像用于中央存储库,或者排除由某个ID标识的存储库。

<mirror>
    <id>internal-mirror</id>
    <url>http://build.idaho.local/wtp_repository</url>
   <mirrorOf>central</mirrorOf>
</mirror>

或者

<mirror>
    <id>internal-mirror</id>
    <url>http://build.idaho.local/wtp_repository</url>
   <mirrorOf>*,!internal-repository</mirrorOf>
</mirror>

这些示例改编自maven settingsguide to mirror settings

答案 1 :(得分:2)

这个问题很老了,但无论如何:

在您的settings.xml中放置<profile>,使用<repository>元素指定内部存储库

...
    <profile>
        <id>devel-repos</id>

        <repositories>
            <repository>
                <id>repo-release</id>
                <url>http://repohost:repoport/path/to/release/repo</url>
            </repository>
            <repository>
                <id>repo-snapshot</id>
                <url>http://repohost:repoport/path/to/snapshot/repo</url>
            </repository>
        </repositories>
    </profile>
...

然后将上述个人资料设为<activeProfile>。这将激活每个maven调用的配置文件。

...
<activeProfiles>
    <activeProfile>devel-repos</activeProfile>
</activeProfiles>
...

这不会避免多个存储库定义,但它会为您提供最重要的事情:所有内容都集中在settings.xml中,而您的pom.xml是干净的(并且可移植)。

答案 2 :(得分:1)

看起来您可能没有正确配置或使用镜像。

理想情况下,您指定为镜像的应该是repository manager,它应该透明地从Internet中的各个存储库下载请求的依赖项并对其进行缓存,从而允许后续下载从镜像发生。

答案 3 :(得分:0)

将存储库部分添加到超级pom。让所有项目从超级pom扩展。

所以每个其他项目的pom都会有一个父节从这样的超级pom扩展。

<parent>
    <groupId>com.ddd.ddd.ddd</groupId>
    <artifactId>ddd-ddd-parent</artifactId>
    <version>1.1.1-SNAPSHOT</version>
    <relativePath>./config/superpom/pom.xml</relativePath>
</parent>

这样你就可以将存储库部分只放在一个pom文件中,这就是你的超级pom。你还可以在这里添加所有项目共有的依赖项,比如junit,log4j和类似的东西。

在settings.xml文件中。您可以添加它来配置本地存储库。

<localRepository>C:/myBox/maven.repo</localRepository>

答案 4 :(得分:0)

settings.xml删除镜像设置,并将以下代码用于我。

<profiles>
    <profile>
        <id>profile-1</id>
        <repositories>
            <repository>
                <id>internal-repository-1</id>
                <url>http://build.idaho.local/wtp_repository</url>
            </repository>
        </repositories>
    </profile>
</profiles>
<activeProfiles>
    <activeProfile>profile-1</activeProfile>
</activeProfiles>
相关问题