这实际上是两个问题,但来自同一个问题:
mvn deploy:deploy-file
命令将该构建中的jar及其关联的POM部署回我们的公司Maven存储库。出现了一个问题。开发人员正在开发Project B ,它使用由Project A 构建的jar。开发人员更改Project A ,然后想在他们的Project B 中使用该更改的jar。
我认为我可以使用<ivy:publish>
将该jar传递到该计算机的本地存储库中。然后,当该开发人员进行构建时,它将使用该版本的jar而不是我们公司存储库中的jar。
但是,我设置Ivy的方式是ivysettings-public.xml
将 checkmodified 设置为 true 。这意味着如果存储库具有不同版本的jar,即使它已经在本地存储库中,它也会下载它。这如何影响开发人员将jar发布到本地存储库的能力?
当Ivy解析依赖项时,它是否注意到本地计算机上的依赖项与公共存储库中的依赖项不同,因此它将始终下载公共jar,或者Ivy是否使用时间戳?也就是说,Ivy会看到本地jar上的时间戳比公司存储库中jar的时间戳更新,因此不会下载公司存储库中的时间戳。
如果需要,我可以将 checkmodified 重置为 false ,但我必须让开发人员知道他们需要在常规上清理常春藤缓存获得最新版罐子的基础。
如何处理可能影响其他项目的基础罐变化问题?
在我目前的模型中(我做的假设),我期望将这些罐子放入我们的公司Maven存储库中的某种工作流程。有人会创建一个问题,它将通过一个工作流,我会将该jar部署到我们的Maven存储库中。
然而,这可能只是限制性太强。也许基础罐的部署(特别是当有很多开发工作正在进行时)应该有点宽松。
最后,我在我们公司设置了Ivy,因此我可以完全控制ivysettings.xml
所有项目(我们使用svn:externals
将Ivy引入所有项目中。)
我可以做的一件事是设置第二个快照存储库。完成Jenkins构建后,可以将jar自动部署到此 snapshot 存储库。我可以允许开发人员将Ant属性传递给构建(通过命令行或通过build.properties
文件),这将允许开发人员在之前使用来自 snapshot 存储库的jar。 发布存储库。
Jenkins可以设置为始终将新构建的jar部署到此 snapshot 存储库,bur。我仍然会将jar的部署控制到我们的发布存储库中。官方(Jenkins)构建将始终使用发布存储库,但开发人员可以根据需要使用快照。
答案 0 :(得分:0)
我们在Maven中再次领先,并在每次构建时创建 snapshot 版本。我为每个通过pom-snapshot.xml
任务构建的jar创建pom.xml
和<ivy:makepom/>
。
我有两个促销活动:一个推广快照版本,另一个推广发布版本(真的是同一个jar)。快照促销在每次成功构建后运行。发布促销手动进行。这样,我们可以将jar提升到我们的发布库中,但仍允许开发人员使用最新的jar。