为什么Maven从错误的存储库下载?

时间:2013-09-08 09:29:33

标签: maven

我是Maven的新手。我正在尝试设置一个本地Archiva 1.3.6服务器,作为项目内部工件的存储库服务器,以及镜像到外部存储库。除快照外,工作正常。我正在使用Maven 3.0.5版。

以下是我的settings.xml文件

中的镜像设置
  <mirrors>
    <mirror>
        <id>internal</id>
        <mirrorOf>external:*</mirrorOf>
        <name>My Maven Repository</name>
        <url>http://my.repo.server:9000/archiva/repository/internal/</url>
    </mirror>
  </mirrors> 

在构建期间,Maven尝试从错误的存储库下载快照工件。我在父级的父pom.xml中设置了2个存储库:internalsnapshots

<repositories>
    <repository>
        <id>internal</id>
        <url>http://my.repo.server:9000/archiva/repository/internal/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
    <repository>
        <id>snapshots</id>
        <url>http://my.repo.server:9000/archiva/repository/snapshots/</url>
        <releases>
            <enabled>false</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

在项目pom.xml中,我有以下依赖关系:

<dependency>
    <groupId>com.mygroup</groupId>
    <artifactId>metadata-framework</artifactId>
    <version>1.0.3.SNAPSHOT</version>
</dependency>

在构建过程中,Maven尝试执行此操作:

Downloading: 
.../archiva/repository/**snapshots**/com/mygroup/metadata-framework/1.0.3.SNAPSHOT/maven-metadata.xml

Downloaded: 
.../archiva/repository/**snapshots**/com/mygroup/metadata-framework/1.0.3.SNAPSHOT/maven-metadata.xml (795 B at 16.9 KB/sec)

Downloading: 
.../archiva/repository/**internal**/com/mygroup/metadata-framework/1.0.3.20130908.081541-1/cems-metadata-framework-1.0.3.20130908.081541-1.pom

[WARNING] The POM for com.myground:metadata-framework:jar:1.0.3.20130908.081541-1 is missing, no dependen
cy information available

我验证了snapshot repo中的文件是否正确,它是否正确生成了maven-metadata.xml等等。看来Maven正确地从snapshot repo下载了元数据,确定了正确的时间戳版本,但不知何故,它决定从internal repo而不是snapshots下载实际文件,这导致404和构建失败。

我不知道Maven是如何运作的,请帮助。

3 个答案:

答案 0 :(得分:0)

@lee - 这是我如何从Archiva内部快照库中下载自定义工件。我每天都使用这个配置。 settingsl.xml:

假设我有一个名为“help”的虚拟仓库。 help由面向外部的回购和2个面向内部的回购组成。这两个面向内部的回购是: help-internal help-snapshots

<mirrors>部分下,我声明:

<mirror>
    <id>help</id>
    <mirrorOf>*, !help-snapshots</mirrorOf>
    <name>The Help Repository</name>
    <url>http://blah:8080/archiva/repository/help/</url>
</mirror>

<servers>部分下,我声明:

<server>
    <id>help</id>
    <username>my_user_name</username>
    <password>{my_encrypted_pwd}</password>
</server>
<server>
    <id>help-snapshots</id>
    <username>my_user_name</username>
    <password>{my_encrypted_pwd}</password>
</server>

现在最后一点。在我的项目使用内部快照的pom中,我包含了这个:

<repositories>
    <repository>
        <id>help-snapshots</id>
        <url>http://blah:8080/archiva/repository/help-snapshots/</url>
        <releases>
            <enabled>false</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

答案 1 :(得分:0)

更简洁,无需修改任何pom.xml,您可以在archiva中定义all存储库组,其中包含internalsnapshots,然后添加以下内容你的.m2/settings.xml

<mirrors>
    <mirror><id>myGroup</id><mirrorOf>*</mirrorOf>
        <url>http://my.repo.server:9000/archiva/repository/all/</url>
    </mirror>
</mirrors>
<profiles>
    <profile><id>alwaysactive</id>
        <activation><activeByDefault>true</activeByDefault></activation>
        <repositories>
            <repository><id>unused</id><url>unused</url></repository>
        </repositories>
    </profile>
<profiles>

答案 2 :(得分:0)

我知道这个帖子已经过时了,为了让maven在快照存储库中搜索,版本应以&#34; -SNAPSHOT&#34; (而不是&#34; .SNAPSHOT&#34;)