【问题标题】:Maven properties in multi-module project are reset to default多模块项目中的 Maven 属性重置为默认值
【发布时间】:2011-11-27 13:55:21
【问题描述】:

我对多模块项目中的属性有疑问。

考虑以下 3 级项目结构:

project
+- pom.xml (packaging: pom)        //referred to as super-pom
+- module_group
   +- pom.xml (packaging: pom)     //referred to as group-pom
   +- module
      +-pom.xml (packaging: jar)   //referred to as module-pom

在超级 pom 中,我定义了一个属性 revision,它获取默认值“未知”。

另外,我声明并使用buildnumber-maven-plugin,它被配置为获取 svn 修订版并将其放入属性 revision

接下来我配置maven-jar-plugin 将该属性写入清单。

在模块 pom 中,我声明了 buildnumber-maven-plugin 的用法,以便实际执行。


这一切都在直接构建模块时起作用,即仅执行模块 pom。 清单包含由buildnumber-maven-plugin 报告的修订版,如控制台中打印的那样。

但是,如果我执行 super-pom 或 group-pom,revision 的默认值将写入清单,尽管 buildnumber-maven-plugin 被执行并检索到正确的修订版(它打印它在maven-jar-plugin 运行之前 到控制台)。

所以我觉得我在多模块项目的属性继承方面遗漏了一些东西。

有人知道这里有什么问题吗?或者谁能​​指出我在这些情况下如何实际处理属性的描述(不幸的是我还没有找到一个好的描述)?

更新

我进行了一些研究并使用调试输出(-X 选项)进行了一些测试运行,从我目前发现的情况来看,我认为我的问题如下:

1) 在 pom 解析期间,pom 中使用的属性被替换为它们的值。

考虑一下这个部分 pom:

<!-- declare the property default value -->
<properties>
  <revision>default</revision>
</properties>

...

<!-- use the property -->
<someconfig>${revision}</someconfig>

在 pom 被评估之后,它似乎会导致一个与此相对应的状态:

<properties>
  <revision>default</revision>
</properties>

...

<!-- The property seems to be "statically" replaced -->
<someconfig>default</someconfig>

2) 设置实际属性值的插件随后运行,即使在validate 阶段。

因此,属性本身已正确设置为新值,但不再读取。

3) 使用&lt;someconfig&gt;(在我的情况下是maven-jar-plugin)的插件现在使用&lt;someconfig&gt;default&lt;/someconfig&gt; 运行,因此它根本不会读取revision

谁能证实这一点?

【问题讨论】:

    标签: maven maven-2 buildnumber-maven-plugin


    【解决方案1】:

    我只能说在 super-pom 中声明 buildnumber-maven-plugin 和 maven-jar-plugin 对我来说效果很好,无论是组构建还是目标构建。

    这是这个超级 pom 的一部分(所有项目的父级):

            <!-- Generate build number -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>buildnumber-maven-plugin</artifactId>
                <version>1.0</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>create</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <doCheck>false</doCheck>
                    <doUpdate>false</doUpdate>
                </configuration>
            </plugin>
            <!-- Attach build number to all jars -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                        </manifest>
                        <manifestEntries>
                            <Implementation-Build>${buildNumber}</Implementation-Build>
                            <Implementation-Build-Timestamp>${maven.build.timestamp}</Implementation-Build-Timestamp>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-30
      • 2011-02-17
      • 2010-10-28
      • 2017-01-30
      • 2017-09-21
      • 2015-02-13
      • 2015-09-07
      • 1970-01-01
      相关资源
      最近更新 更多