为什么maven从存储库下载依赖项,即使jar存在于我的本地存储库中(一个原因可能是jar没有pom),除了使用-o选项之外,有没有办法绕过它? / p>
答案 0 :(得分:2)
为什么maven从存储库下载[SNAPSHOT]依赖项,即使jar存在于我的本地存储库中
因为这是SNASPSHOT依赖项的预期行为。与固定版本不同,Maven会定期尝试下载给定SNAPSHOT的最新版本。当你依赖于正在积极开发的项目时,这非常有用。来自 Maven参考:
3.3.1.2. SNAPSHOT Versions
Maven版本可以包含字符串 字面意思是项目是 目前正在积极发展。如果 版本包含字符串 “SNAPSHOT”,然后Maven将扩大 此标记为日期和时间值 转换为UTC(协调 通用时间)安装时或 发布此组件。例如, 如果你的项目有一个版本 “1.0-SNAPSHOT”并部署了这个 项目的工件到Maven 存储库,Maven会扩展它 版本为“1.0-20080207-230803-1”如果 你是在11:08部署一个版本 PM于2008年2月7日UTC。其他 单词,当您部署快照时,您 没有发布软件 零件;你正在释放一个 特定组件的快照 时间。
你为什么要用这个?快照 版本用于下的项目 积极发展。如果你的项目 取决于软件组件 正在积极发展,你可以 取决于SNAPSHOT版本,和 Maven会定期尝试 从a下载最新的快照 运行构建时的存储库。 同样,如果您的下一个版本 系统将有一个版本 “1.4”,你的项目将有一个 版本“1.4-SNAPSHOT”直到它 正式发布。
作为默认设置,Maven不会 检查远程SNAPSHOT版本 库。依赖SNAPSHOT 发布时,用户必须明确启用 下载快照的能力 使用
repository
或pluginRepository
POM中的元素。发布项目时,您应该这样做 解决SNAPSHOT上的所有依赖项 版本依赖于发布 版本。如果一个项目依赖于 SNAPSHOT,它不稳定 依赖关系可能会随时间而变化。 工件发布到非快照 Maven存储库如 http://repo1.maven.org/maven2不能 取决于SNAPSHOT版本,如 Maven的Super POM有快照 从中央存储库禁用。 SNAPSHOT版本用于开发 仅
如果您确实想要更改此行为,则可以更改启用快照的存储库的updatePolicy
:
<repositories>
<repository>
<id>my-repo</id>
<name>My Corporate Repository</name>
<url>http://repo.mycompany.com/maven2</url>
<layout>default</layout>
...
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
</repository>
切换为never
会强制您使用手动更新(使用mvn -U
)。但要注意,这通常不是人们想要和期待的SNAPSHOT。
对于记录,Maven 3有一个-nsu, --no-snapshot-updates
命令行选项,允许抑制SNAPSHOT更新。
答案 1 :(得分:0)
您可以通过手动安装文件在本地存储库中生成一个pom:
mvn install:install-file
-Dfile=[FILE]
-DgroupId=[GROUP]
-DartifactId=[ARTIFACT]
-Dversion=[VERSION]
-Dpackaging=jar
-DgeneratePom=true
-DcreateChecksum=true
编辑:您不希望为快照执行此操作。