我正在使用Maven来构建我的代码。我创建了基于模块的maven结构,如下所示
我的所有模块版本和外部依赖项版本都在父POM中维护。一切工作正常,当我做一个完整的安装MVN,但是当我尝试建立一个子模块像SP1_Child1,然后构建失败,因为它不能识别它的依赖的版本。我检查了本地机器中的maven存储库,并且我的所有模块都已安装,但.POM文件没有版本号。这可能是因为父POM上的mvn安装位置没有将$ {module.version}替换为子模块的实际版本。
父-POM
<project ..>
<groupId>the.company.project</groupId>
<artifactId>Parent-POM</artifactId>
<version>1.0-SNAPSHOT</version>
...
<properties>
<module.version>1.0</module.version>
</properties>
</project>
SP1_Child1
<project ..>
<parent>
...
</parent>
<groupId>the.company.project</groupId>
<artifactId>SP1_Child1</artifactId>
<version>${module.version}</version>
...
</project>
我的mvn如何安装更新maven存储库中的.POM文件中的版本?或者如何在没有任何版本错误的情况下运行我的子模块?
答案 0 :(得分:2)
子pom的默认布局应该如下所示。
<project ..>
<parent>
<groupId>the.company.project</groupId>
<artifactId>SP1_Child1</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>the.company.project</groupId>
<artifactId>SP1_Child1</artifactId>
...
</project>
但是,您的孩子不应仅在父元素中单独定义版本而不使用属性。该版本将自动从父级继承到子模块。如果您拥有相同的组,则也不需要在子组中定义组。您可以像这样使用它:
<project ..>
<parent>
<groupId>the.company.project</groupId>
<artifactId>SP1_Child1</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>SP1_Child1</artifactId>
...
</project>
答案 1 :(得分:1)
从父级获取SP1_Child1版本对您来说非常烦人,因为它会强制您为任何新版本的SP1_Child1项目安装新版本的父版本。
有两种不同的可能情况:
您希望能够管理具有不同生命周期的不同项目。 然后在SP1_Child1项目中指定一个版本,并指定要由父POM中的其他项目使用的SP1_Child1的版本(在这种情况下,2个值可以不同)。
您的应用程序是单片的,即使它是为了方便而组织在不同的模块中。那么在这种情况下,最好是做khmarbaise建议的事情,为你的所有项目保留一个版本,并从父母继承版本。