9

我的 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 组包括 thereleasessnapshotsrepo。

我没有在其中配置这些存储库settings.xml- 是这个问题吗?还是我做错了什么?

4

2 回答 2

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>

您可能会发现这个类似问题的答案也很有帮助。

于 2013-02-14T08:07:10.753 回答
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 插件。

于 2013-02-14T08:50:19.410 回答