制作maven父项目的最佳做法

时间:2015-10-07 20:17:13

标签: java maven

我开发了一个多模块项目,这是一种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。 我的解决方案看起来很棘手,我想如果遇到同样问题的人有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

我终于通过flatten-maven-plugin找到了解决方案。 但是我必须发布一个pull请求来支持pluginManagement部分。 https://github.com/mojohaus/flatten-maven-plugin/pull/10

所以解决方案是在发布之前修改我的父pom,感谢这个插件。因此,我可以设置我想要的版本,而不是使用$ {project.version}。