【问题标题】:Maven - Access properties on parent pom from a child pomMaven - 从子 pom 访问父 pom 上的属性
【发布时间】:2012-03-31 06:46:21
【问题描述】:

在多模块项目结构中

myApp
|-moduleA
|---pom.xml
|-moduleB
|---pom.xml
|-pom.xml

如果我在 parent.pom 中有以下属性

  <properties>
   <moduleA.version>4.67</moduleA.version>
   <moduleB.version>4.68</moduleB.version>
  </properties>  

如何从任何子 pom 访问父 pom 中的属性?我在孩子 pom 上试过这个,但没有用。

  <groupId>com.test</groupId>
  <artifactId>moduleA</artifactId>
  <version>${moduleA.version}</version>

【问题讨论】:

    标签: maven build release release-management


    【解决方案1】:

    如果你有一个真正的多模块构建,你不应该将模块定义为具有不同的版本。他们应该有相同的版本,这使得发布和其他事情成为可能。否则,您不应使用多模块设置,而应使用分离的简单单个模块。

    【讨论】:

    • 在一个真正的多模块项目中(即一个没有在子模块中指定版本的项目),从本地存储库中使用了哪些版本的子模块?它总是使用最新版本吗?
    • 版本由父模块继承。深入研究一下:sonatype.com/books/mvnex-book/reference/multimodule.html
    • 谢谢这是我最初所做的,但由于stackoverflow.com/questions/9670158/… 这里给出的建议,我改变了它。看起来我可能不得不恢复使每个模块独立。谢谢
    • 你提到的项目的问题是我永远不会把jsP放到不同的模块中,因为它们属于war模块。有时为 java 部分创建单独的模块而不是为 jsp 部分创建单独的模块可能很有用,或者您有多个战争。
    • 多个war文件的问题是需要对跨上下文通信和会话处理进行大量更改,这并不值得付出努力。我同意它们都应该在一个战争文件中,但我没有任何其他选择,因为这是我可以拆分它的唯一方法。
    【解决方案2】:

    这应该可行。我能想到的一个可能原因是,也许你实际上并没有继承定义这些属性的 pom(即它没有直接或间接地定义为你的 &lt;parent&gt;),但你只有一个聚合您的项目的主 pom。不过,这是一个猜测。

    【讨论】:

    • 是的,你是对的。我没有关于子模块的“”信息。在 Maven 3 中,我不必定义这些。父 pom 只包含 '' 部分,它指定了哪些模块是项目的一部分。只有当我在子模块上有''标签时它才会起作用吗?
    • 如果您只使用根 pom 中的模块部分,这是一个聚合项目,而不是真正的多模块构建,因为它错过了从其父 pom 的继承。
    猜你喜欢
    • 2018-08-07
    • 2012-12-22
    • 2013-01-23
    • 2012-07-15
    • 2015-09-29
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多