【发布时间】:2017-01-12 10:03:52
【问题描述】:
是否可以在 Maven 中为 SNAPSHOT 和 RELEASE 工件配置不同的本地存储库?
我问的原因是,我们正在使用 Jenkins 为我们的项目进行持续构建。为了确保在构建开始之前的一致性(如果由于竞争条件而从不同的 Jenkins 作业构建相同的工件,我们可能会遇到混乱的行为),我们为 Jenkins 创建了一个新的本地存储库。
现在的问题是,我们的项目非常庞大,因此对于每次构建,我们都必须从 Nexus 下载大量依赖项,但仔细想想,没有理由每次都下载新的 RELEASE 工件。 RELEASE 工件不会因构建而异,例如 Spring 4.5、httpclient 4.0、aspectj 1.8.1 对于一个构建到另一个构建是相同的。
所以实际上为了确保一致性,我们只应该在存储库中不存在 SNAPSHOT 依赖项。如果我们可以有两个本地存储库,一个用于 RELEASE 工件,另一个用于 SNAPSHOT,那么在每次构建开始之前,我们可以删除 SNAPSHOT 存储库,但重新使用本地 RELEASE 存储库,这样可以节省我从 Nexus 下载的千兆字节。
我知道我们可以为远程存储库进行 RELEASE、SNAPSHOT 配置,是否可以为本地存储库进行相同类型的配置?
如果这是不可能的,你将如何解决这个问题。
【问题讨论】:
-
您应该使用单独的存储库进行快照和发布,这里解释了 pom 配置 stackoverflow.com/questions/14211697/…
-
本文中解释的是远程存储库(在部署到 Nexus 时进行了讨论)。这不是我想要的,我想定义两个本地存储库,一个用于 SNAPSHOT,一个用于发布。这就是它在 settings.xml "
c:\repo " 中的配置方式。我喜欢“c:\repo_snap ”和“c:\repo_rel ”之类的东西或产生类似效果的方法。 -
对不起,我误解了我已经添加了答案,你不应该这样做。
-
@posthumecaver 你是怎么解决这个问题的?我看到你没有接受正确的答案。如果您能够以其他方式解决此问题,请发布单独的答案。
-
不幸的是,仍然没有标准的解决方案,我们最终会做什么,在每次发布开始时,我们都会从本地 maven 存储库中删除所有 SNAPSHOT 依赖项,我们压缩其余的依赖项,然后 jenkins 在下一个构建中开始解压缩这个文件并将它放置到它的本地存储库(使用 groovy 脚本 :( )然后开始构建,这个文件对我们来说大约 500 MB 大,所以我们不必每次都通过网络,它不是很好,但这是我们目前唯一的解决方案..