我目前正在写某种Maven的POM预处理器,对于从多个输入文件的项目组装一个POM(基本模板和模块特定的文件) 。这些文件按层次排序(模板=最常用,模块特定=最不常用)。现在的问题是将这些文件合并成一个POM文件。与配置规则(背景:Maven的POM中,爪哇)合并XML文件
长话短说,或者如果你不熟悉使用Maven:一个POM看起来像这样(缩短):
<project>
<modelVersion>4.0.0</modelVersion>
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
</dependency>
</dependencies>
</project>
基本上合并,应当与值替换更加通用文件的值(即单身人士,例如上面的<modelVersion>
),但是存在某些元素,其中合并应该是加上对于父母来说更确定的元素(即集合,例如<dependency>
元素应该总是被添加到<dependencies>
元素,而不是<dependency>
元素s大厅被另一个替换)。
文件A:
<project>
<modelVersion>A</modelVersion>
<dependencies>
<dependency>
<groupId>groupIdA</groupId>
<artifactId>artifactIdA</artifactId>
</dependency>
</dependencies>
</project>
文件B:
<project>
<modelVersion>B</modelVersion>
<dependencies>
<dependency>
<groupId>groupIdB</groupId>
<artifactId>artifactIdB</artifactId>
</dependency>
</dependencies>
</project>
希望的输出:
<project>
<modelVersion>B</modelVersion>
<dependencies>
<dependency>
<groupId>groupIdA</groupId>
<artifactId>artifactIdA</artifactId>
</dependency>
<dependency>
<groupId>groupIdB</groupId>
<artifactId>artifactIdB</artifactId>
</dependency>
</dependencies>
</project>
设定
与期望的输出的定义更详细的例子科尔ection类型元素是已知的,应该是可配置的(最好通过一组XPath表达式)。
基于Java的解决方案受到赞赏。
什么看起来最有前途的,到目前为止是工具提到here但合并时,这不是我所需要的MERGE
动作产生类似
<dependency>
<groupId>groupIdAgroupIdB</groupId>
<artifactId>artifactIdAartifactIdB</artifactId>
</dependency>
。
任何想法?谢谢你的帮助!
我没有运行正常的Maven构建。相反,我正在运行一个预处理器,它只是构建POM(即它也构建了父POM,所以没有任何东西可以继承)。 这个背后的目的是预处理器是一个插件的一部分,该插件从各种模块中动态地组装项目,这些模块遍布在颠覆回购中。 – 2010-04-14 12:50:02