簡體   English   中英

Maven:如何讀取父 POM 版本

[英]Maven: How to read the Parent POM version

背景:我的大部分 Java 項目都有很多樣板配置,我最終將這些配置寫入我的 POM。 (例如 sourceEncoding 總是 UTF-8,組織細節永遠不會改變)。 為了避免復制粘貼配置塊,我創建了自己的標准“父”POM,我可以為我的每個項目擴展。

我也有許多在我從事的每個 Java 項目中使用的工具(例如 checkstyle、PMD 等),因此我已將每個工具的插件添加到我的標准父 pom 中。

PMD(和其他一些工具)有一個有趣的問題——它們需要一組配置文件才能正確運行。 由於 Maven 更喜歡使用“每個模塊一個可部署資源”的概念,因此我創建了以下(簡化的)結構:

<My Template>
  |--- Config Files
  \--- Parent Pom
  • 我的模板:是一個由 Maven 控制的項目,有兩個模塊
  • 配置文件:是一個 maven 模塊,它將 PMD 配置文件捆綁成一個 ZIP 並將它們部署到一個 maven 倉庫
  • 父 Pom:是我所有的樣板代碼。 它依賴於“配置文件”,並設置為從 ZIP 中提取配置

到目前為止一切順利......

要求: “父 Pom”和“配置文件”總是一起構建和部署 - 即“父 Pom”版本 1.2.3 只能與“配置文件”版本 1.2.3 一起使用,所以當我在“父 POM”我需要執行以下操作:

<dependency>
    <groupId>org.my-org</groupId>
    <artifactId>config-files</artifactId>
    <version>${project.version}</version>
    <type>zip</type>
    <scope>test</scope>
</dependency>

問題:當我開始我的應用程序(假設版本 0.0.1)時,我使用“Parent Pom”作為我的父母。 Maven 將計算項目的有效 POM,${project.version} 將被解釋為 0.0.1(應用程序版本)而不是 1.2.3(父 POM 版本)。 Maven 然后無法找到配置文件。

問題:我如何告訴 Maven “給我 POM xxx 的版本”?

我真正不需要做的是創建與 ${project.version} 同步的其他屬性,因為我可以保證當我們為發布而修改 POM 時我們會忘記更新它!

您可以做一些事情。

您可以使用${project.parent.version}而不是${project.version}

但可能更好的方法是在您的父 pom 中定義pluginManagement和/或dependencyManagement - 使用適當的版本和配置。 在您的子項目中,您只需“使用” dependenciesbuild/plugins的“托管”版本/配置, dependencies無需指定具體版本或配置。

例如,參見開源項目中廣泛使用的org.sonatype.oss:oss-parent POM。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM