我正在尝试使用位于我们本地网络中的存储库来设置Maven,我已经为快照设置了存储库,并为Releases设置了存储库(两个都是apache archiva)。
从发布存储库下载软件包可以正常工作。但是,当我尝试从快照存储库加载SNAPSHOT版本时,当我尝试下载自己部署的SNAPSHOT时,我不断收到错误:
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.
Missing:
----------
1) my.company:product2:jar.lastUpdated:0.0.2-SNAPSHOT
Try downloading the file manually from the project website.
[...]
Path to dependency:
1) my.company:product1:war:0.0.1-SNAPSHOT
2) my.company:product2:jar.lastUpdated:0.0.2-SNAPSHOT
----------
1 required artifact is missing.
for artifact:
my.company:product1:war:0.0.1-SNAPSHOT
from the specified remote repositories:
my-internal (http://my-repo:8080/archiva/repository/internal),
central (http://repo1.maven.org/maven2),
my-snapshots (http://my-repo:8080/archiva/repository/snapshots),
该软件包在snapshots-repo中可用,网络已启动,登录正常。
我的pom.xml看起来像这样:
[...]
<repositories>
<repository>
<id>my-snapshots</id>
<name>my name Snapshots Repository</name>
<url>http://my-snapshots:8080/archiva/repository/snapshots</url>
<snapshots>
<enabled/>
<updatePolicy/>
<checksumPolicy/>
</snapshots>
</repository>
<repository>
<id>my-internal</id>
<name>my name internal Repository</name>
<url>http://my-repo:8080/archiva/repository/internal</url>
</repository>
</repositories>
[...]
<dependency>
<groupId>my.company</groupId>
<artifactId>frontend-api</artifactId>
<version>0.0.2-SNAPSHOT</version>
<type>jar.lastUpdated</type>
</dependency>
[...]
我还检查了从snapshot-repo下载的maven-metadata.xml:
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>my.company</groupId>
<artifactId>product2</artifactId>
<version>0.0.2-SNAPSHOT</version>
<versioning>
<snapshot>
<buildNumber>7</buildNumber>
<timestamp>20090824.130209</timestamp>
</snapshot>
<lastUpdated>20090824130209</lastUpdated>
</versioning>
</metadata>
它显示正确的日期和时间戳(包含此时间戳的包存在于回购中)。
我是否遗漏了有关存储库设置或SNAPSHOT概念的内容?有没有人有同样的问题?或者有人知道有关SNAPSHOT和存储库的一些详细文档吗?
答案 0 :(得分:3)
my-app的依赖声明是什么样的?我希望它看起来像这样:
<dependency>
<groupId>my.company</groupId>
<artifactId>product2</artifactId>
<version>0.0.2-SNAPSHOT</version>
</dependency>
从错误中看,它看起来像是由原型生成并添加了lastUpdated类型。如果是这种情况,删除lastUpdated应解决问题。
如果情况并非如此,您可以分享您的POM部分吗?
有关Maven SNAPSHOT版本的更多信息,请参阅Maven book:
Maven版本可以包含字符串文字,表示项目当前处于活动开发状态。如果版本包含字符串“SNAPSHOT”,则当您安装或发布此组件时,Maven会将此标记扩展为转换为UTC(协调世界时)的日期和时间值。例如,如果您的项目的版本为“1.0-SNAPSHOT”,并且您将此项目的工件部署到Maven存储库,那么如果您要在11版本部署版本,Maven会将此版本扩展为“1.0-20080207-230803-1”。 :UTC时间2008年2月7日晚上8点。换句话说,在部署快照时,您不会发布软件组件;您正在特定时间发布组件的快照。
因此通常不需要lastUpdated属性。
答案 1 :(得分:0)
使用-e标志运行mvn以获取更详细的错误消息。
答案 2 :(得分:0)
您的settings.xml文件怎么样?
如果您的pom xml具有以下内容:
<repositories>
<repository>
<id>my-snapshots</id>
<name>my name Snapshots Repository</name>
<url>http://my-snapshots:8080/archiva/repository/snapshots</url>
<snapshots>
<enabled/>
<updatePolicy/>
<checksumPolicy/>
</snapshots>
</repository>
然后setting.xml应该有:
<server>
<id>my-snapshots</id>
<username>user</username>
<password>pass</password>
<privateKey>${user.home}/.ssh/id_dsa</privateKey>
<passphrase>some_passphrase</passphrase>
<filePermissions>664</filePermissions>
<directoryPermissions>775</directoryPermissions>
<configuration></configuration>
</server>
1)存储库用户名和密码必须如上所述
2)设置和pom中的id标记必须相同:
<id>my-snapshots</id>