我在理解如何在我的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
。有时需要添加或覆盖任务。 我刚刚读了here和here该解决方案可能使用动态修订版。 据我了解,我会将所有常春藤文件的修订版设置为integration-latest
,并将所有常春藤文件中的状态设置为integration
。然后,常春藤总是会自动解析最新版本。 但是,我将我的模块的修订版设置为?完全忽略它? 我将如何创建发布版本?我是否需要更改所有常青藤文件并将其状态设置为release
,或者如果可能,我是否会在发布模块之前执行传递任务,并将状态覆盖为release
?
我们最近为我们的项目实现了这一点。必要时基本上采取以下步骤: – jaw
它通常起作用。在必要的情况下,基本上采取以下步骤:1.在''标签内,彻底删除'revision'属性并将'status'属性更改为''integration''。 2.在依赖库中,将''标签内的'rev' attr更改为'latest.integration'。 3.在ant构建文件中,对''任务,添加'resolveMode =“dynamic”'并添加一些版本魔法,如上面链接中所述。如果你改变'lib-a',pub-local,然后解决'project -a',它会找到更新后的'lib-a',这将在命令行中起作用。不幸的是,它不适合常春藤豆。 –
jaw
@ebeb您是否真的需要在解决任务中设置resolveMode属性? –