我目前正在编写某种 Maven POM 预处理器,它为来自多个输入文件(基本上是模板和模块特定文件)的项目组装 POM。文件按层次排序(模板 = 最通用,特定模块 = 最不通用)。现在的问题是将这些文件合并到一个 POM 文件中。
长话短说,或者如果您不熟悉 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>
元素不得被另一个元素替换)。
一个更详细的示例,其中包含所需输出的定义:
档案一:
<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>
集合类型元素的集合是已知的并且应该是可配置的(最好通过一组 XPath 表达式)。
赞赏基于 Java 的解决方案。
到目前为止看起来最有希望的是这里提到的工具,但该MERGE
操作会产生类似
<dependency>
<groupId>groupIdAgroupIdB</groupId>
<artifactId>artifactIdAartifactIdB</artifactId>
</dependency>
合并时,这不是我需要的。
有任何想法吗?谢谢你的帮助!