当我进行开发时,我经常需要更改依赖项,但我还没准备好部署我的更改。例如,我正在研究项目Foo,我意识到我需要向公共库添加一个方法。在将此更改部署到内部存储库之前,我想将更改安装到公共库(mvn install
)并重新编译Foo以使用本地存储库中的公共库(请注意,我使用的是所有SNAPSHOT版本)。
然而,在我mvn install
我的公共库之后,当我重新编译Foo时,它不使用新的公共库 - 它继续使用内部存储库中最新的SNAPSHOT公共库。如果我部署更改的公共库,Foo会立即选择它。
如何让maven首先在本地存储库中查找?
更新:当文件安装到本地存储库时,它会得到类似foo-1.0.0-SNAPSHOT.jar
的名称,但是当我部署它时,它会得到一个时间戳foo-1.0.0-20111104.191316-23.jar
。我想这就是为什么每次都会拉动远程工件。知道为什么mvn install
不像mvn deploy
那样有效吗?是否与我为部署设置快照存储库这一事实有关?
答案 0 :(得分:3)
默认情况下,Maven每天检查一次SNAPSHOT工件的新版本。当它执行此检查时,它将从远程存储库下载比本地更新的SNAPSHOTS。您的工件时间戳不同步,并且您正在做一些事情来覆盖Maven的更新策略(如calling it with -U或setting the udpatePolicy到“always”),或者您正在安装工件的本地存储库与你随后运行Maven的那个不一样。你所描述的不是典型的Maven行为。要获得更好的答案,请在您的问题中提供更多详细信息。
您可以查找的一个指标:安装普通工件后,当您下次编译Foo时,Maven是否会再次下载公共工件?如果是这样,那么它真的是从遥控器获取它,你需要检查你的更新设置。如果没有,那么你在本地就会发生一些奇怪的事情。
答案 1 :(得分:0)
您可以尝试此选项。这对我有用。
在项目的主要pom.xml中,将“快照”设置更改为“false”。
<repository>
<id>yourRepo</id>
<name>Repository</name>
<url>http://your.repo.com/repo</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>