【发布时间】:2014-08-16 10:46:58
【问题描述】:
我有一个多模块(聚合器)Maven 项目,它也从父 pom 继承属性。所以在我的父母 pom.xml 我有这个:
<groupId>com.something.project</groupId>
<artifactId>MyProject</artifactId>
<packaging>pom</packaging>
<version>1.0.123</version>
<modules>
<module>ModuleA</module>
<module>ModuleB</module>
<module>ModuleC</module>
</modules>
我想让所有子模块继承父版本号1.0.123,但是子pom.xml 要求我继续硬编码父版本号(ModuleA pom.xml 示例):
<artifactId>ModuleA</artifactId>
<name>Some Amazing Thing</name>
<parent>
<relativePath>../</relativePath>
<artifactId>MyProject</artifactId>
<version>1.0.123</version>
<groupId>com.something.project</groupId>
</parent>
我怎样才能将版本号放在父 pom 中,并让模块继承它而不必在多个地方更新它?到目前为止,我已经尝试过 ${project.version} 和 ${project.parent.version} 并且 Maven 似乎对此很不满意。我也不能完全删除版本参考。
有人对此有好的答案吗?
【问题讨论】:
-
aven 似乎对此很不满意请解释一下
-
这是典型的先有鸡还是先有蛋的场景。您希望从父版本继承版本号,但没有指定要从哪个版本的父版本继承版本号!
-
我得到的具体错误是这样的(注意路径已被编辑): [错误] 不可解析的父 POM:无法传输工件 com.something.project:MyProject:pom:${ project.version} from/to internal(repo 路径):索引 91 处路径中的非法字符:myserver/blah/blah/blah/${project.version}/MyProject-${project.version}.pom 和 'parent.relativePath' 指向错误的本地POM @ 第 11 行,第 13 列 -> [帮助 2]
-
@MarkPeters - 明白了,但是在我使用父 pom 构建整个项目的情况下,它不应该首先运行并提供该信息吗?我可以理解,如果我直接去子 pom 并说“现在运行,没有父信息”,但在这种情况下,Maven 应该从父 pom 内部访问子 pom,不是吗?我觉得很奇怪。
-
我不认为 maven 构建是这样工作的(这就是为什么孩子必须首先引用父 pom)。每个模块构建都有些独立。