有没有办法让Maven自动下载快照版本?
所以我有一个项目依赖于另一个项目的快照版本。 依赖是:
org.oop oop 0.9.9-SNAPSHOT
对于oop项目,我确实进行了“mvn clean deploy”,因此快照版本应该位于maven中央存储库中的某个位置。 但是当我进行mvn clean安装时,上面的快照依赖项无法解决,我得到了这个:
失踪:
1)org.oop:oop:jar:0.9.9-SNAPSHOT
尝试从项目网站手动下载文件。
然后,使用以下命令安装它:mvn install:install-file -DgroupId = org.oop -DartifactId = oop -Dversion = 0.9.9-SNAPSHOT -Dpackaging = jar -Dfile = / path / to / file
或者,如果您托管自己的存储库,则可以在那里部署文件:mvn deploy:deploy-file -DgroupId = org.oop -DartifactId = oop -Dversion = 0.9.9-SNAPSHOT -Dpackaging = jar -Dfile = / path / to / file -Durl = [url] -DrepositoryId = [id]
有没有办法让maven自动下载快照? 我必须在这里遗漏一些东西。
EDIT1:在我的settings.xml上,我有:
sonatype-nexus-snapshots XXXXXX XXXXXX sonatype-nexus-staging XXXXXX XXXXXX
EDIT2:
只需将其添加到〜/ .m2 / settings.xml:
allow-snapshots true snapshots-repo https://oss.sonatype.org/content/repositories/snapshots false true
Maven会尝试自动下载快照,实际上也是如此(正如您的错误所示)。 默认情况下,Maven将每天查找一次较新的快照版本,但您可以在快照存储库配置中更改该时间间隔(例如,在settings.xml中):
interval:5
这将使maven每5分钟检查一次(如果你经常建立)。 或者,您可以使用-U
或--update-snapshots
选项手动强制检查。
但是,它无法找到依赖关系。 你能为快照依赖发布你的repo设置和工件配置吗?
您的存储库中是org.oop:oop:jar:0.9.9-SNAPSHOT
工件吗?
…所以快照版本应该在maven中央存储库中的某个位置。
不,不是。 我试着查一查,但找不到它。 Afaik,有一些升级机制,所以也许你的设置是错的。 但通常情况下,正如其他人已经说过的那样,您可以使用自己的存储库管理器,如Artifactory或Nexus。
要更新快照,请尝试使用-U选项
-U,--update-snapshots Forces a check for updated releases and snapshots on remote repositories
但是,你说:
我确实做了’mvn clean deploy’,因此快照版本应该位于maven中央存储库中的某个位置。
这是不可能的,你的快照正在其他地方。 如果我在没有配置我的个人存储库的情况下进行mvn clean deploy
,我会得到:
部署失败:未在分配管理元素中的POM或-DaltDeploymentRepository = id :: layout :: url参数中指定存储库元素
要启用部署,需要将一些配置添加到pom.xml,例如:
myrepo My releases http://nexus.mycompany.com/nexus/content/repositories/releases myrepo my snapshots http://nexus.mycompany.com/nexus/content/repositories/snapshots myrepo My Public Repository http://nexus.mycompany.com/nexus/content/groups/public true true
您的存储库中是否存在该依赖项? (在pom.xml或settings.xml中)?
看起来不是。 顺便说一句,看看你的配置,只是你没有使用-o
(离线)。 您也可以使用-U
刷新快照。
你也可以
- 使用构建所有快照的父项目,或
- 使用例如mvn:deploy将您的快照部署到您的maven构建服务器(nexus / archiva / ..)
让我们清楚一些术语,以确保没有误解。
“Maven Central”( http://search.maven.org/ )是一个全球网站,您只能在其中找到版本。 Central不接受快照,因此在那里部署应该会给您一个错误。
您可能意味着您的本地/公司范围的maven代理/缓存。 这些也可以配置为拒绝快照版本。 对于Nexus,您还可以定义更复杂的规则。 在我的情况下,我有一个问题,在mvn deploy
期间没有出错,但我可以在服务器的日志中看到错误。
尝试关注数据:启用调试( mvn -X
)以查看Maven上传数据的位置。 然后检查服务器以查看工件是否真正上传。 检查服务器的日志以查找错误。
另请注意,快照依赖项每天只刷新一次; 所以这不会起作用:
PC#1: mvn install
– >错误缺少依赖PC#2: mvn deploy
PC#1: mvn install
– >由于“每天更新一次”策略,依赖性仍然缺失
尝试使用mvn install -U
强制Maven刷新其缓存的元数据。
即使在命令行上设置-U,我也遇到了不更新快照的问题。 对我来说,问题是我的客户端是Maven 3,服务器是Maven 2,而在Maven 3中不再支持独特的快照。 我们必须创建一个带有带时间戳的快照的新存储库来支持3.xx客户端。