Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使Maven子POM与父POM具有相同的版本号?_Java_Maven - Fatal编程技术网

Java 使Maven子POM与父POM具有相同的版本号?

Java 使Maven子POM与父POM具有相同的版本号?,java,maven,Java,Maven,我有一个多模块(聚合器)Maven项目,它也从父pom继承属性。因此,在我的父pom.xml中,我有以下内容: <groupId>com.something.project</groupId> <artifactId>MyProject</artifactId> <packaging>pom</packaging> <version>1.0.123</version> <modules>

我有一个多模块(聚合器)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>
我如何将版本号放在父pom中,让模块继承它,而不必在多个地方更新它?到目前为止,我已经尝试了${project.version}和${project.parent.version},Maven似乎对此非常不满意。我也不能完全删除版本引用


有人对此有好的答案吗?

一般来说,如果您使用maven管理版本,那么将父版本放入子模块pom中不是问题。当您运行maven发布插件时,它将为您更新所有子模块中的所有版本

更新:

如果您想自己管理版本,那么您可能会遇到一些麻烦。我很确定,您必须在每个pom中至少指定一次版本号。您可以编写一些脚本,为自己进行递归搜索和替换(而不是手动执行),从而简化工作


作为旁白:maven是以“最好(maven)做事方式”的心态构建的。如果你遵循这种方式,事情通常会变得非常简单,并且工作得非常好。用不同的方式做事通常是可能的,但离“最佳方式”越远,事情就越痛苦(或不可能)。

我想这已经得到了答案@


我尝试了这个解决方案,它对我有效(使用ApacheMaven3.0.5)。但是,它有一个局限性,即如果我们直接转到child pom并构建,它将无法解析版本变量。

aven似乎对此非常不满意,请解释这是典型的鸡和蛋的场景。您希望从父级继承版本号,但不指定要从哪个父级继承版本号!我得到的具体错误如下(注意路径已被编辑掉):[error]不可解析的父POM:无法将工件com.something.project:MyProject:POM:${project.version}从/到内部(repo path):索引91处路径中的非法字符:{project.version}/MyProject-${project.version}.pom和'parent.relativePath'指向错误的本地pom@line 11,column 13->[Help 2]@MarkPeters-明白,但是在我使用父pom构建整个项目的情况下,它不应该首先运行并提供这些信息吗?我可以理解,如果我直接到子pom并说“现在运行,没有父级信息”,但在这种情况下,Maven应该从父级pom内部访问子pom,不是吗?对我来说似乎很奇怪。我不认为maven是这样构建工作的(这就是为什么孩子必须首先引用父pom的原因)。每个模块的构建都有些独立。不幸的是,我们没有使用maven发布插件,我们所有的版本管理都是手工完成的。我不知道为什么(我必须同意你关于“最好(maven)做事方式”的评论)-看起来只要你按照maven的方式去做,你就没事,但如果你不这么做,就会有麻烦。谢谢你的帮助。使用
mvn版本:set
在整个层次结构中设置一个版本。maven总是需要一个父版本来正确解析pom,但我认为它已经改变了..re:
maven的方式关于做事
,不幸的是,maven的一些文档特别推荐了一些实际上不起作用的东西。也许它们曾经起作用,但事情从这种风格演变而来。例如,文档说如果父模块使用
风格,那么子模块甚至不需要指定父模块。这不是真的尼莫尔。
<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>