2013-04-18 74 views
0

我在理解如何在我的Java项目中有效地使用动态修订Ivy时遇到问题。常春藤:使用动态修订

目前,我有以下布局:

lib-a 
revision: 1.0.0 
status: release 
dependencies: none 

lib-b 
revision: 2.0.0 
status: release 
dependencies: lib-a, rev 1.0.0 

project-a 
revision: 3.0.0 
status: release 
dependencies: lib-b, rev 2.0.0 

project-b 
revision: 4.0.0 
status: release 
dependencies: lib-b, rev 2.0.0 

这意味着我总是状态保持到release和使用明确的版本号。 如果我在开发过程中更改lib-a,比如lib-a,这是非常痛苦的。

我保存lib-a中的更改,将常见问题文件中的修订更新为1.0.1,稍作更改。然后,我需要更新lib-b的依赖关系来宣布lib-a的修订版本1.0.1。现在我可以更新lib-b以及project-a的版本,因为project-a是可执行文件,并且包含我需要运行的集成测试。

第二种方法是重新发布lib-b与更新的依赖关系,但版本相同。这通常适用于命令行上的ant,但不适用于使用ivy-beans插件的NetBeans。他们仍然使用lib-b.的ivy文件的缓存版本。所以我需要清理本地缓存才能使其工作。

我在我们的SVN仓库中为所有项目使用了一个通用的build-ivy.xml ant脚本。每个项目的根目录中都有build.xml,大部分时间只包含build-ivy.xml。有时需要添加或覆盖任务。 我刚刚读了herehere该解决方案可能使用动态修订版。 据我了解,我会将所有常春藤文件的修订版设置为integration-latest,并将所有常春藤文件中的状态设置为integration。然后,常春藤总是会自动解析最新版本。 但是,我将我的模块的修订版设置为?完全忽略它? 我将如何创建发布版本?我是否需要更改所有常青藤文件并将其状态设置为release,或者如果可能,我是否会在发布模块之前执行传递任务,并将状态覆盖为release

回答

1

我建议阅读以下有关常春藤多模块项目的教程。

ANT构建传统的大而整体。您需要做的就是模仿Maven将大型项目分解为一系列较小版本的方式。每个子版本都将它的神器出版到常春藤的本地回购中。

常春藤有很多有用的任务这种结构:

  • buildlist - 从你的整体主构建文件调用。使用浏览了每个子模块的ivy.xml和确定合适的建造顺序(有些模块depende别人)
  • buildnumber - 什么已经发布看起来并产生下一个版本号的顺序
  • publish中 - 推将文物转换为本地回购(或外国文件,如果在ivysettings中配置的话)。xml文件)
+0

我们最近为我们的项目实现了这一点。必要时基本上采取以下步骤: – jaw

+1

它通常起作用。在必要的情况下,基本上采取以下步骤:1.在''标签内,彻底删除'revision'属性并将'status'属性更改为''integration''。 2.在依赖库中,将''标签内的'rev' attr更改为'latest.integration'。 3.在ant构建文件中,对''任务,添加'resolveMode =“dynamic”'并添加一些版本魔法,如上面链接中所述。如果你改变'lib-a',pub-local,然后解决'project -a',它会找到更新后的'lib-a',这将在命令行中起作用。不幸的是,它不适合常春藤豆。 – jaw

+0

@ebeb您是否真的需要在解决任务中设置resolveMode属性? –