gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:58:16 25 4
gpt4 key购买 nike

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

考虑以下 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

在 super pom 中,我定义了一个属性版本,它获取默认值“未知”。

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

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

在模块 pom 中,我声明使用 buildnumber-maven-plugin所以这实际上是执行的。

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

但是,如果我执行 super-pom 或 group-pom,则修订的默认值将写入 list ,尽管 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) 使用 <someconfig>的插件(在我的情况下,它将是 maven-jar-plugin )现在与 <someconfig>default</someconfig> 一起运行因此它不会读取 revision一点也不。

谁能证实这一点?

最佳答案

我只能说在 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>

关于多模块项目中的 Maven 属性重置为默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7595630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com