快照存储库问题

时间:2012-02-26 19:30:53

标签: maven archiva

我们已经安装了Archiva,默认设置了两个存储库。

以下是我的 settings.xml

<server>
   <id>mycompany-release</id>
   <username>admin</username>
   <password>******</password>
</server>
<server>
   <id>mycompany-snapshots</id>
   <username>admin</username>
   <password>******</password> 
</server>

<mirror>
   <id>mycompany-release</id>
   <url>http://X.X.X.X:8080/archiva/repository/internal/</url>
   <mirrorOf>external:*</mirrorOf>
</mirror>
<mirror>
   <id>mycompany-snapshots</id>
   <url>http://X.X.X.X:8080/archiva/repository/snapshots/</url>
   <mirrorOf>apache.snapshots</mirrorOf>
</mirror>

<profile>
    <id>repo</id>
    <repositories>
        <repository>
           <id>mycompany-release</id>
           <url>http://X.X.X.X:8080/archiva/repository/internal/</url>
           <releases>
                  <enabled>true</enabled>
           </releases>
           <snapshots>
                  <enabled>false</enabled>
           </snapshots>
    </repository>
    <repository>
           <id>mycompany-snapshots</id>
           <url>http://X.X.X.X:8080/archiva/repository/snapshots/</url>
           <releases>
                  <enabled>false</enabled>
           </releases>
           <snapshots>
                  <enabled>true</enabled>
           </snapshots>
    </repository>
   </repositories>      
</profile>

<activeProfiles>
    <activeProfile>repo</activeProfile>
</activeProfiles>

我有一个父项目,用于设置所有项目的公共配置。此父项目的版本为1-SNAPSHOT。因此,在所有其他项目中,父节指向具有版本1-SNAPSHOT(没有相对路径元素)的此父项目。如果我将我的父项目部署到archiva存储库,它就在那里。如果我尝试在另一个项目上运行任何命令,如mvn clean,它可以工作,因为在部署期间安装了父项目。但是,如果我从本地存储库手动删除父项目并尝试运行相同的命令,Maven会返回错误说:

  

不可解析的父POM:无法找到工件   com.mycompany:Parent:pom:mycompany-release中的1-SNAPSHOT   (http://X.X.X.X:8080 / archiva / repository / internal /)和   'parent.relativePath'指向错误的本地POM

似乎在发布存储库中查找了父项目,而我预计它会在快照存储库中查找。

感谢您的帮助

编辑:以下是儿童POM的一部分:

<parent>
    <groupId>com.mycompany</groupId>
    <artifactId>Parent</artifactId>
    <version>1-SNAPSHOT</version>
</parent>

<groupId>com.mycompany</groupId>
<artifactId>child</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

如果我删除父节并运行mvn help:effective-pom,我得到(只显示存储库):

<repositories>
    <repository>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>mycompany-release</id>
      <url>http://X.X.X.X:8080/archiva/repository/internal/</url>
    </repository>
    <repository>
      <releases>
        <enabled>false</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
      <id>mycompany-snapshots</id>
      <url>http://X.X.X.X:8080/archiva/repository/snapshots/</url>
    </repository>
    <repository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Maven Repository Switchboard</name>
      <url>http://repo1.maven.org/maven2</url>
    </repository>
  </repositories>

注意:如果我将父版本替换为1(而不是1-SNAPSHOT),则可以正常工作。

1 个答案:

答案 0 :(得分:1)

我发现了什么问题。 settings.xml 中有问题的行是:

<mirrorOf>external:*</mirrorOf>

实际上,它导致Maven将 mycompany-release 存储库视为 mycompany-snapshots 存储库的镜像。但是,此存储库不会镜像快照。我用以下代码替换了这一行:

<mirrorOf>central</mirrorOf>

现在, mycompany-release 存储库仅镜像Maven中央存储库而不是 mycompany-snapshots 存储库,因此它会在中查找快照工件。 mycompany-snapshots 存储库。

感谢Andrew的帮助!我现在没有可能显示完整的日志。