多模块项目中的Maven属性将重置为默认值

Tho*_*mas 5 maven-2 maven buildnumber-maven-plugin

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

考虑以下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
Run Code Online (Sandbox Code Playgroud)

在super-pom中,我定义了一个属性修订版,它获取了默认值"unknown".

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

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

在模块-pom我声明使用buildnumber-maven-plugin实际执行的.


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

但是,如果我执行super-pom或group-pom,则将版本的默认值写入清单,尽管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>
Run Code Online (Sandbox Code Playgroud)

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

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

...

<!-- The property seems to be "statically" replaced -->
<someconfig>default</someconfig>
Run Code Online (Sandbox Code Playgroud)

2)即使在validate阶段期间,设置实际属性值的插件也会在之后运行.

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

3)使用<someconfig>(在我的情况下它将是)的插件maven-jar-plugin现在运行,<someconfig>default</someconfig>因此它根本不读取revision.

谁能证实这一点?

wee*_*ens 0

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

这是这个 super-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>
Run Code Online (Sandbox Code Playgroud)