Maven:为什么工件文件名中缺少-SNAPSHOT后缀?

时间:2013-02-14 07:40:20

标签: maven nexus snapshot artifact

我的maven工件已部署到Nexus快照存储库。在那里,它存储在正确的目录中,但其文件名具有以下模式:

mylibrary-1.0-20130213.125827-2.jar

但是,Maven无法下载该快照。根据错误日志,Maven似乎期望以下文件名:

mylibrary-1.0-SNAPSHOT.jar

这些是我的pom中的存储库设置:

<repositories>
    <repository>
        <id>mycompany-all</id>
        <url>https://servername/nexus/content/groups/mycompany/</url>
    </repository>
</repositories>

<distributionManagement>
    <repository>
        <id>mycompany-releases</id>
        <url>https://servername/nexus/content/repositories/releases/</url>
    </repository>
    <snapshotRepository>
        <id>mycompany-snapshots</id>
        <url>https://servername/nexus/content/repositories/snapshots/</url>
    </snapshotRepository>
</distributionManagement>

注意:nexus组包含releasessnapshots个回购。

我没有在settings.xml配置这些回购 - 问题是什么?或者我还有什么其他的错误?

2 个答案:

答案 0 :(得分:14)

您发布的模式(mylibrary-1.0-20130213.125827-2.jar)是一个独特的快照版本。 Maven 3强制您使用这种类型的工件命名,但在Maven 2中,可以使用如下语句来阻止它:

<distributionManagement>
  ...
  <snapshotRepository>
    ...
    <uniqueVersion>false</uniqueVersion>
  </snapshotRepository>
  ...
</distributionManagement>

要在项目中使用特定快照,请将其声明为:

<dependency>
  <groupId>com.foo</groupId>
  <artifactId>mylibrary</artifactId>
  <version>1.0-20130213.125827-2</version>
</dependency>

要使用最新的已知快照,请将其声明为“旧式”:

<dependency>
  <groupId>com.foo</groupId>
  <artifactId>mylibrary</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>

您也可以找到此similar question的答案。

答案 1 :(得分:7)

我通过将存储库添加到settings.xml来实现它的工作:

<repositories>
    <repository>
        <id>mycompany-releases</id>
        <url>https://servername/nexus/content/repositories/releases/</url>
        <releases><enabled>true</enabled></releases>
        <snapshots><enabled>false</enabled></snapshots>
    </repository>
    <repository>
        <id>mycompany-snapshots</id>
        <url>https://servername/nexus/content/repositories/snapshots/</url>
        <releases><enabled>false</enabled></releases>
        <snapshots><enabled>true</enabled></snapshots>
    </repository>
</repositories>

然后,SNAPSHOT jar文件下载得很好。我怀疑,当Maven知道它处理快照回购时,它会尝试使用和不使用uniqueVersion(参见Duncan Jones的回答)。

请注意,在我们的情况下,这些块必须复制为pluginRepositories,因为我们有自定义Maven插件。