Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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
Maven-版本化父pom和子pom以继承父pom版本_Maven_Maven 3 - Fatal编程技术网

Maven-版本化父pom和子pom以继承父pom版本

Maven-版本化父pom和子pom以继承父pom版本,maven,maven-3,Maven,Maven 3,我正在使用Maven 3.x,在我的父pom和子pom中有以下结构 母体聚甲醛 <groupId>com.mygoogle.sample</groupId> <artifactId>workorder</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <properties> <pr

我正在使用Maven 3.x,在我的父pom和子pom中有以下结构

母体聚甲醛

<groupId>com.mygoogle.sample</groupId>
<artifactId>workorder</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
    <project.version>1.0-SNAPSHOT</project.version>             
</properties>
com.mygoogle.sample
工单
1.0-快照
聚甲醛
1.0-快照
我有一个孩子pom,如下所示

<parent>
 <groupId>com.mygoogle.sample</groupId>
 <version>${project.version}</version>
 <artifactId>workorder</artifactId>     
</parent>
<artifactId>workorder-client</artifactId>
<packaging>jar</packaging>

com.mygoogle.sample
${project.version}
工单
工单客户端
罐子
当我使用mvn安装构建工件时, 我看到JAR正在我的.m2文件夹中构建,但project.version没有被实际版本(即1.0-SNAPSHOT)替换

  • my.m2存储库中每个工件的父pom和/或子pom是否都指定了版本,还是为project.version

  • 我甚至应该在父pom中将project.version指定为属性。maven文档指出,project.version可由defualt提供。我还在我的父pom中尝试了mvn install post removing project.version属性,但生成的工件在我的.m2文件夹中的版本仍然是{project.version},而不是实际版本

  • 如何在父pom中设置版本,并使所有子pom具有相同的版本。例如,我想在workorder pom中设置一个版本,workorder客户端pom也应该继承相同的版本


  • 您的父pom应该如下所示:

    <groupId>com.mygoogle.sample</groupId>
    <artifactId>workorder</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    
    <parent>
       <groupId>com.mygoogle.sample</groupId>
       <version>1.0-SNAPSHOT</version>
       <artifactId>workorder</artifactId>     
    </parent>
    
    <artifactId>workorder-client</artifactId>
    <packaging>jar</packaging>
    
    com.mygoogle.sample
    工单
    1.0-快照
    聚甲醛
    
    您的孩子pom应该是:

    <groupId>com.mygoogle.sample</groupId>
    <artifactId>workorder</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    
    <parent>
       <groupId>com.mygoogle.sample</groupId>
       <version>1.0-SNAPSHOT</version>
       <artifactId>workorder</artifactId>     
    </parent>
    
    <artifactId>workorder-client</artifactId>
    <packaging>jar</packaging>
    
    
    com.mygoogle.sample
    1.0-快照
    工单
    工单客户端
    罐子
    
    这将有助于顺利维护父级和子级之间的版本控制。
    下次要更改版本时,只需使用下面的命令,同时指向父pom目录


    mvn版本:set-DnewVersion=2.0-SNAPSHOT

    可能的副本您需要指定
    ,不能依赖
    项目。version
    属性:它不在
    元素中计算。@Tunaki,刚刚编辑了我的原始帖子,我本来打算在父pom中指定实际版本,但指定了{project.version}属性,我现在已经更正了。那么,在上面的设置中,为什么我的子pom没有在父pom中获取该属性。对于最初的混淆,我深表歉意。正如链接问题中所回答的,您不能有
    ${project.version}
    。你必须在
    元素中有
    1.0-SNAPSHOT
    。我可以在我的子pom中有{project.version}吗,如下com.mygoogle.sample${project.version}workorder workorder client jar刚编辑了我的原始帖子,我本打算在父pom中指定实际版本,但指定了{project.version}属性。那么,在上面的设置中,为什么我的子pom没有在父pom中拾取属性?您不能使用
    ${project.version}
    因为在子pom中没有定义这样的属性。所以继承不会首先发生。可能您会对它将从父pom继承感到困惑。但是由于未定义
    ${project.version}
    属性,子pom将无法解析
    ${project.version}
    value。因此不会发生继承。