![](/img/trans.png)
[英]Is it possible to outsource the dependencyManagement to a file (have a local BOM)?
[英]Flatten Plugin: Resolve dependencyManagement of bom without inherited
我為這個問題創建了一個示例項目: https://github.com/robeatoz/flatten-resolve-dependency-management-without-inherited
給出以下項目結構:
我在所有模塊中使用了 flatten-maven-plugin 和 CI 友好構建的屬性revision
:
<groupId>stack.overflow</groupId>
<artifactId>foo-build</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>
<properties>
<revision>0.1-SNAPSHOT</revision>
</properties>
父級 (foo-build) 管理一個外部依賴項:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>external.artifact</groupId>
<artifactId>module-managed-in-parent</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
</dependencyManagement>
bom (foo-dependencies) 管理 foo 依賴項:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>stack.overflow</groupId>
<artifactId>foo-module-a</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>stack.overflow</groupId>
<artifactId>foo-module-b</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>stack.overflow</groupId>
<artifactId>foo-module-c</artifactId>
<version>${revision}</version>
</dependency>
</dependencies>
</dependencyManagement>
我希望 bom 的扁平化 pom 僅包含已解析的 foo 依賴項,而不包含父級(foo-build)管理的依賴項,如下所示:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>stack.overflow</groupId>
<artifactId>foo-module-a</artifactId>
<version>0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>stack.overflow</groupId>
<artifactId>foo-module-b</artifactId>
<version>0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>stack.overflow</groupId>
<artifactId>foo-module-c</artifactId>
<version>0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</dependencyManagement>
你必須如何配置 flatten-maven-plugin 來實現這一點?
我已經嘗試過<flattenMode>bom</flattenMode>
,但是扁平化的 pom 沒有解析版本:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>stack.overflow</groupId>
<artifactId>foo-module-a</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>stack.overflow</groupId>
<artifactId>foo-module-b</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>stack.overflow</groupId>
<artifactId>foo-module-c</artifactId>
<version>${revision}</version>
</dependency>
</dependencies>
</dependencyManagement>
使用以下配置
<pomElements>
<properties>remove</properties>
<dependencyManagement>resolve</dependencyManagement>
</pomElements>
扁平化的 pom 包含父級的托管依賴項:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>stack.overflow</groupId>
<artifactId>foo-module-a</artifactId>
<version>0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>stack.overflow</groupId>
<artifactId>foo-module-b</artifactId>
<version>0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>stack.overflow</groupId>
<artifactId>foo-module-c</artifactId>
<version>0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>external.artifact</groupId>
<artifactId>module-managed-in-parent</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
</dependencyManagement>
將您的方法更改為更加以客戶為中心會更簡單:
使foo-dependencies成為根項目( ./pom.xml
)。
foo-*
依賴 使foo-build成為一個中間項目( ./foo-build/pom.xml
)。
保留以foo-build作為父級的foo-module-*葉模塊
如果您堅持使用簡單的項目結構( ./foo-module-*/pom.xml
),您可以使用relativePath
指向父模塊,例如:
<parent>
<groupId>stack.overflow</groupId>
<artifactId>foo-build</artifactId>
<version>${revision}</version>
<relativePath>../foo-build/pom.xml</relativePath>
</parent>
<artifactId>foo-module-a</artifactId>
這樣您將收到:
foo-*
依賴項的零復制粘貼;我喜歡完全相同的用例,並使用以下配置解決了它。
您需要在 BOM 模塊的 pom 文件中對 flatten-plugin 應用非常具體的配置:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<configuration>
<updatePomFile>true</updatePomFile>
<pomElements>
<dependencyManagement>expand</dependencyManagement>
</pomElements>
</configuration>
</plugin>
expand
意味着 dependencyManagement 塊將替換為來自有效 pom的塊,其中所有引用都已正確解析。 updatePomFile
是必需的,否則默認情況下,不會為帶有<packaging>pom</packaging>
的 poms 發布扁平化的 pom
以下是 flatten-plugin 文檔中的相關部分:
不需要用${revision}改版本,用${project.version}試試
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.