我的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组包含releases
和snapshots
个回购。
我没有在settings.xml
配置这些回购 - 问题是什么?或者我还有什么其他的错误?
答案 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插件。