1

我有以下 POM 结构:

/home/projects/parent/pom.xml

<project>
   <groupId>com.my.group</groupId>
   <artifactId>project-super-parent</artifactId>
    <version>${major.version}.${minor.version}</version>
    <packaging>pom</packaging>
    <properties>
            <major.version>7</major.version>
            <minor.version>5</minor.version>
            <current.release.version>${major.version}.${minor.version}-SNAPSHOT</current.release.version>
            ...
    </properties>

    ....

</project>

/home/projects/module1/pom.xml

<project>
   <groupId>com.my.group</groupId>
   <artifactId>module1</artifactId>
    <version>${current.release.version}</version>
    <packaging>jar</packaging>


    <parent>
        <groupId>com.my.group</groupId>
        <artifactId>project-super-parent</artifactId>
        <version>${major.version}.${minor.version}</version>
        <relativePath>../parent</relativePath>
    </parent>

    ...
</project>

请注意,模块不知道其父级的版本 - 它使用父级中定义的属性,因此这是一种鸡与蛋的问题。

奇怪的是 - 这有效 - 所以当我想更改产品的主要版本时 - 我只更改一个 pom 文件(父文件)。

此解决方案的限制是我必须在文件系统上拥有所有 POM 文件。

我的问题是:这是否可行?它究竟是如何工作的?当我升级到 maven 3 时它可能会停止工作吗?这是常用的解决方案还是滥用系统?

当前使用 Maven 2.2.1 和 Java 7。

4

2 回答 2

3

这是常用的解决方案还是滥用系统?

这并不常见,至少我以前从未见过。您在 parent/pom.xml 和 module1/pom.xml 中的版本控制会导致混淆。父级具有 7.5 的RELEASED版本,而 module1 具有 7.5 的SNAPSHOT版本。如果 7.5 已经发布,您不应该开发 7.5-SNAPSHOT。

避免重复的最简单方法是在父版本中维护版本。您可以省略 module1 中的版本声明。看看另一个项目,例如 maven-3 源代码。您将能够看到该版本仅在pom 中声明,而不在其任何子pom 中声明。

maven-release-plugin将帮助您处理版本升级并为您发布它们。

于 2013-07-18T14:27:07.677 回答
0

从子 pom 中省略 version 元素会产生错误。属性可以在主 pom 中使用,并且可以由子 pom 继承。当您运行 Main pom 时,构建将导致成功。问题是

  1. 你不能独立构建子pom
  2. 这在传递依赖的情况下不起作用
  3. 如果您将来升级到 Maven 3,它将给出错误“Non-resolvable parent pom

如果我们能够在将项目 pom 文件安装到本地存储库之前将其作为构建过程的一部分进行更新,则可以解决这些问题

于 2015-03-26T05:03:18.360 回答