如何在互不继承的平行Maven POM中引用自定义属性?
平行Maven POM间共享自定义属性的实现方法
直接通过${pom1.artifact.id-the.property}这种方式引用另一个平行POM的自定义属性是做不到的——Maven原生属性机制仅支持继承链内的属性传递,或者通过额外配置实现跨平行POM的属性共享。下面是几种可行的方案:
方案1:抽离到公共属性文件
把需要共享的属性单独放在一个.properties文件中(比如项目根目录下的shared.properties),内容如下:
the.property=This is the property
然后在两个平行POM中都通过properties-maven-plugin加载这个文件:
<build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>properties-maven-plugin</artifactId> <version>1.0.0</version> <executions> <execution> <phase>initialize</phase> <goals> <goal>read-project-properties</goal> </goals> <configuration> <!-- 根据实际路径调整 --> <files> <file>../shared.properties</file> </files> </configuration> </execution> </executions> </plugin> </plugins> </build>
配置完成后,两个POM都能直接使用${the.property}引用属性值。
方案2:调整结构使用父POM继承
如果允许调整项目结构,创建一个作为父级的POM,让两个平行POM都继承它:
父POM中定义共享属性:
<properties> <the.property>This is the property</the.property> </properties>
在两个平行POM中添加继承配置:
<parent> <groupId>你的项目组ID</groupId> <artifactId>parent-pom</artifactId> <version>1.0.0</version> </parent>
这是Maven原生支持的属性共享方式,配置简单且易于维护。
方案3:依赖属性传递(仅适用于存在依赖关系的场景)
如果两个项目存在依赖关系(比如POM A是POM B的依赖),可以通过依赖的属性传递机制共享:
- 在属性定义的POM中确保属性已在
<properties>中声明 - 在引用的POM中通过
${your.group.id:your.artifact.id:the.property}的方式引用
不过这种方式对自定义属性的支持有限,通常更适合传递内置依赖属性,优先级不如前两种方案。
内容的提问来源于stack exchange,提问作者Szdnez
相关产品推荐
相关产品推荐

