2011-02-11 170 views
14

通常情况下,我在我的Maven的配置如下镜settings.xmlMaven仓库镜子

<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将检查当地回购协议中的依赖关系,如果未找到,则将其从互联网下载到本地回购站。一旦我有我需要的依赖关系,然后再更改我的配置。

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

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

回答

0

将存储库部分添加到super 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> 
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

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

理想情况下,您指定为镜像的应该是repository manager,它应该透明地从互联网上的各个存储库下载所请求的依赖项并缓存它,从而允许后期下载从镜像发生。

2

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

将一个<profile>在你的设置。XML,使用<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 s为清洁(和便携式)。

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>