2010-09-19 85 views
1

让我先解释我们的基础架构。使用Maven管理多个内部项目(从ant/ivy切换)

我公司生产两种企业软件产品(每种产品又包含多台服务器)。让我们叫他们ProductAProductB

ProductA由被支起来,但都是单独构建,并作为单个单元处理40个独立的项目。由于每个项目都会创建大型依赖关系树,因此我们使用Ivy/Ant来管理依赖关系。 TeamA正在不断修改所有这些项目,有时以不兼容的方式进行修改,因此我们将所有内容发布为常青藤(示例)1.0.0.SVN_REV。当我们依赖某些东西时,我们会说1.0.0.+并使用冲突解决程序来获得一组兼容的依赖关系。

想象一下,一个依赖关系图,如:

W -> X -> Y 
     \ 
     -> Z 
    /
    V 

当我们的顶级项目取决于W 1.0.0.+V 1.0.0.+,我们可能无法获得最新的V作为最新W可能尚未与最新Z建成,所以常春藤驱逐最新的V,取代1.0.0.9而不是1.0.0.10,因为最新的WV 1.0.0.9都依赖于Z v1.0.0.6所有这些版本都是由Bamboo驱动的,并且配置了依赖项来启动子版本的构建必要的,因此这些项目中的每一个都是分开构建的

所以,对于这种设置,常春藤保证所有我们的顶级依赖关系,是二进制兼容。现在,顶级构建可能需要最新的V才能正确编译,所以会因编译错误而失败,但如果编译成功,我们就会知道所有依赖项都是二进制兼容的,并且QA不会花费时间当W调用Z时,安装8台服务器以找出某种方法丢失。

ProductB利用了其中约30个这样的项目,但它并没有采取最新的措施,而是等待ProductA的QA团队对发布进行认证,然后开始使用这些依赖关系。

其相当明显的Maven将如何为ProductB工作,因为他们总是依赖于一个不变的依赖集。

所以,在评估Maven时,我看到SNAPSHOT依赖关系和发布如何给我们提供基本结构。不过,我不知道或者不明白的是是否Maven的,发布W时,它修改POM,以填补在已使用的明确的快照,或者它只是说,W取决于X-1.0.0-SNAPSHOT

如果它不替换使用的确切X,我怎么能得到相同的二进制兼容保证常春藤给我?

唯一的答案显然是采取一个巨大的建设,使所有40个项目,但是这将需要相当长的时间来建立,当顶级项目是唯一的变化。如果进行über编译需要30分钟,我可能会看到每个版本5-10次提交,这将很难评估哪个开发者破坏了构建。所以基本上,我正在寻找一个不同的解决方案,而不是这个。

回答

0

当常春藤发布到仓库的一个可以选择指定的发行版

<ivy:publish resolver="shared" pubrevision="1.0" status="release"> 
    <artifacts pattern="dist/[artifact].[ext]" /> 
</ivy:publish> 

约常春藤伟大的事情是,它会生成并发布“的ivy.xml”,将拥有所有的动态版本号码在发布时解决。所有这些你可能已经知道了。

令人惊讶的是,Maven需要更多的工作。你需要插件来在本地编辑你的POM(如果你的POM也有子模块)。欲了解更多详情,请参阅以下插件

所以你需要确保你的POM是叫“MVN部署”前犹太。

说实话,我还没有完全放弃基于ivy的构建,因为我发现很难仿效ivy对动态模块相互依赖的简单支持。我相信这是可能的,就像我说过的那样,当你习惯了常春藤时,它看起来更像是工作。

为了简化从常春藤到Maven的过渡,您是否考虑过使用常春藤生成模块POM?下面的工作对我非常好:

<ivy:deliver deliverpattern="dist/ivy.xml" pubrevision="1.0" status="release"/> 
<ivy:makepom ivyfile="dist/ivy.xml" pomfile="dist/pom.xml"> 
    <mapping conf="default" scope="compile"/> 
    <mapping conf="runtime" scope="runtime"/> 
</ivy:makepom> 

deliver任务将解决所有动态的依赖,并创建可被用来生成一个Maven POM ivy文件。然后,这个POM发布旁边你的模块标准神器,需要在ivy文件中指定:

<ivy-module .. 
.. 
    <publications> 
     <artifact name="mymod" type="war" conf="master" /> 
     <artifact name="pom" type="pom" ext="xml" conf="master" /> 
    </publications> 

确保您使用的常春藤2.2.0版本和标准常春藤出版工作(见上文)应该没有问题上传你的工件和生成的POM