我开发了一个多模块项目,这是一种java web框架。 其中一个子模块是我为我的框架用户提供的父pom。此父级为它们配置插件和依赖项。 我的问题是这个父pom必须引用兄弟模块的版本,即$ {project.version},并且由于maven项目继承,$ {project.version}不是我想要的。
为了说明,我的框架项目结构如下:
my-framework/
|_pom.xml
|_parent/
|_pom.xml
|_server/
|_pom.xml
|_ui/
|_pom.xml
我的父母pom看起来像:
<project
....
<!-- General information -->
<modelVersion>4.0.0</modelVersion>
<artifactId>my-framework-parent</artifactId>
<packaging>pom</packaging>
<parent>
<groupId>my.framework</groupId>
<artifactId>my-framework</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<properties>
<my.framework.version>${project.version}</my.framework.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>my.framework</groupId>
<artifactId>my-framework-server</artifactId>
<version>${my.framework.version}</version>
</dependency>
<dependency>
<groupId>my.framework</groupId>
<artifactId>my-framework-ui</artifactId>
<version>${my.framework.version}</version>
</dependency>
</dependencyManagement>
...
</project>
然后,如果用户使用此父级,则当maven在用户项目的上下文中解析$ {project.version}时,$ {my.framework.version}将成为用户的项目版本而不是我的框架版本。
为了解决这个问题,我生成了我想要的父pom,感谢maven-resources-plugin,我重写了maven-install-plugin行为来安装生成的pom。 我的解决方案看起来很棘手,我想如果遇到同样问题的人有更好的解决方案吗?
答案 0 :(得分:0)
我终于通过flatten-maven-plugin找到了解决方案。 但是我必须发布一个pull请求来支持pluginManagement部分。 https://github.com/mojohaus/flatten-maven-plugin/pull/10
所以解决方案是在发布之前修改我的父pom,感谢这个插件。因此,我可以设置我想要的版本,而不是使用$ {project.version}。