父POM采用的是我在模块版本中提供的相同版本

时间:2015-04-22 22:50:41

标签: maven-3 pom.xml parent-pom

我有一个多模块maven项目,例如

一个 乙 C d Ë 目前这个项目工作正常,只有一个工作来构建所有模块并上传到神器,其中包含一些版本,例如: 4.0.0-。他们正在使用版本:来自Jenkins job的set -DnewVersion = 4.0.0 - $ {BUILD_NUMBER}。现在我的下一个任务是将这个项目分成模块,这样他们开发团队可以独立构建每个模块但我的问题是一些模块对其他模块具有依赖性,例如

模块B依赖模块A和模块C.如果我先构建模块A然后生成数字4.0.0-00001并将其上传到工件,然后我构建模块C然后生成模块4.0.0-00005.现在问题是如何构建模块B,它依赖于模块A和C.我认为我需要在依赖部分中明确定义模块A和C的版本。

-fa

从我的模块POM我打电话给我父母的POM和我正在给的jenkins工作 版本:设置-DnewVersion = 4.0.0 - $ {BUILD_NUMBER}用于版本控制目的如果我明确定义A模块的版本,那么它也将相同的值传递给父POM并搜索它不可用.Below是我的模块POM文件

     <dependency>
        <groupId>com.xyz.engine</groupId>
        <artifactId>A</artifactId>
        <version>4.0.0-00005</version>
     </dependency>

它为我分配给Common模块的Parent POM采用相同的值。我将Parent POM保存在单独的存储库中它不应该采用相同的值,它应该只采用我为Parent POM定义的值它应该从它们下载它并将所有值提供给模块POM,并且应该为具有不同版本的模块LicenseVerifier创建构建。

1 个答案:

答案 0 :(得分:0)

如果你有一个多模块构建,如下所示:

root (pom.xml parent of all modules)
 +---- module-a (pom.xml)
 +---- module-b (pom.xml)
 +---- module-c (pom.xml)
 +---- module-d (pom.xml)

要单独构建模块,您可以通过Maven执行此操作:

mvn -pl module-a  clean package

这将仅构建module-a并从远程存储库获取其他模块的依赖项。或者你可以像这样增强:

mvn -pl module-a -amd clean package

选项-amd表示--also-make-dependents。如果开发人员需要特定的状态,您可以先通过mvn install执行此操作,然后再构建您要构建的模块。

与多模块构建关系中一个非常重要的事情是为所有模块和父模块提供相同的版本。因此,这些模块之间的依赖关系没有问题。

Maven 3.2.1开始,您可以通过属性定义版本。

  

一个简单的更改,以防止Maven发出有关版本的警告   带有属性表达式。版本中允许的属性表达式   包括$ {revision},$ {changelist}和$ {sha1}。这些属性可以   在外部设置,但最终会在Maven中创建一个机制   这些属性可以以标准方式注入。例如   你可能想要收集当前的Git版本并注入该值   进入$ {sha1}。这绝不是连续的完整解决方案   交付,但是朝着正确的方向迈出了一步。

此外,在开发过程中,我更喜欢SNAPSHOT版本,它们可以简化存储库管理器中的清理工作。所以本质上我不需要将逻辑上属于的模块分开。

除此之外,如果您在多模块构建中使用相同的版本,则可以使用以下内容:${project.version}来定义作为reactor的一部分的依赖项的版本。