为啥 Maven 不总是从 theartefactory 下载最后一个依赖项,从竹子构建?
Posted
技术标签:
【中文标题】为啥 Maven 不总是从 theartefactory 下载最后一个依赖项,从竹子构建?【英文标题】:Why does Maven not always download the last dependency from theartefactory, build from bamboo?为什么 Maven 不总是从 theartefactory 下载最后一个依赖项,从竹子构建? 【发布时间】:2011-12-13 12:53:35 【问题描述】:我正在使用竹子来自动构建我们的模块,并使用 maven 来构建工具。 它可以正常工作,但有时如果我需要增加模块的版本(例如从 1.0-SNAPSHOT 更改为 1.1-SNAPSHOT)
我做以下事情: 1)在我的svn存储库中标记1.0-SNAPSHOT版本在同一目录结构下,但在标记根目录中。这样做是出于兼容性原因。 2) 创建竹子构建计划,构建标记模块。 3)增加模块的版本,在trunk中。
到目前为止一切顺利。但是有时当我构建客户的项目时,标记的模块不是从 maven 下载的(即使我可以看到它是用竹子正确构建的)并且它使用标记之前的旧 jar。此外,maven 并不总是下载最后一个 jar,我必须手动从 .m2 目录中删除它或更新模块并在我的机器上手动重建它(不使用离线模式)。这很痛苦,但作为开发人员,我可以做到这一点,但我们的项目也是由管理员构建的,他们不知道如何管理它,他们有时会部署具有错误依赖关系的项目,这会导致麻烦:)。
如果有人知道如何解决这个问题,请告诉我。
【问题讨论】:
这将始终从存储库中获取最新快照:mvn -U clean install,这是 mvn --update-snapshots clean install 的缩写形式 您能否在本地构建和竹服务器中混合使用 maven 2 和 maven 3 - 不同的? 【参考方案1】:查看您的 settings.xml
文件。你会发现这样的部分:
<profile>
<id>FooBar</id>
<!--Enable snapshots for the built in central repo to direct -->
<!--all requests to nexus via the mirror -->
<repositories>
<repository>
<id>nexus</id>
<!-- use a bogus URL as this gets overwritten by the mirror settings -->
<url>http://central</url>
<releases>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<!-- use a bogus URL as this gets overwritten by the mirror settings -->
<url>http://central</url>
<releases>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<!--make the profile active all the time -->
<activeProfile>FooBar</activeProfile>
</activeProfiles>
确保每次您想下载工件的任何地方都使用<updatePolicy>always</updatePolicy>
,而不是使用本地的。
【讨论】:
如果存储库中的代码比我的本地 jar 更新,我只想下载。 @user358448 据我了解,如果本地库更新,maven 不会替换它们。 “总是”设置只是“总是”尝试从存储库更新您的工件(仅当它们较新时)。如果您有很多 SNAPSHOTS 并且需要经常构建,这可能会非常耗时。因此,如果您确定存储库版本没有更改(但在您的情况下确实如此),您可以更改策略。试试看!【参考方案2】:在构建依赖于该模块的客户端应用程序时尝试mvn deploy -U
。 -U
参数用于在构建依赖项目时检索最新构建的 SNAPSHOT 依赖项(不是指最新版本,而是最后构建的 SNAPSHOT 工件),在您的情况下可能是客户端应用程序。
【讨论】:
以上是关于为啥 Maven 不总是从 theartefactory 下载最后一个依赖项,从竹子构建?的主要内容,如果未能解决你的问题,请参考以下文章