[英]Java with Maven: How to make Module B depend on jar of module A?
語境:
問題是關於一個使用maven進行構建的多模塊(maven,而不是Java 9模塊)Java項目,其中一個模塊取決於另一個模塊的jar。
模塊概述和一些上下文:
什么有效:
mvn clean package
將模塊構建到三個單獨的jar中(對於B和C可執行)。 我想實現的目標:
是否有使用maven做到這一點的優雅解決方案?
從Maven 3.5.0-beta開始,有一個revision
字段用於管理多模塊項目。
https://maven.apache.org/maven-ci-friendly.html
您基本上需要您的父pom.xml
看起來像
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
</parent>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>${revision}</version>
...
<properties>
<revision>1.0.0-SNAPSHOT</revision>
</properties>
</project>
然后你的子模塊A(子)看起來像
<project>
<modelVersion>...</modelVersion>
<parent>
<groupId>...</groupId>
<artifactId>...</artifactId>
<!-- Make sure you have maven 3.6.0 at least for this to work -->
<version>${revision}</version>
</parent>
<groupId>...</groupId>
<artifactId>...</artifactId>
<!-- Don't put version, it's taken from the parent -->
...
</project>
最后,您的模塊B看起來像這樣
<project>
<modelVersion>...</modelVersion>
<parent>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>${revision}</version>
</parent>
<groupId>...</groupId>
<artifactId>...</artifactId>
...
<dependency>
<groupId>...</groupId>
<artifactId>module-A</artifactId>
<version>${project.version}</version>
</dependency>
...
</project>
您的模塊C很可能看起來像模塊A,但沒有依賴關系
這應該使您的pom在本地工作。 如果需要部署這些組件,則還需要添加一個flatten
插件,該插件將使用pom.xml
並將變量revision
替換為項目的實際版本。
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>1.1.0</version>
<configuration>
<updatePomFile>true</updatePomFile>
<flattenMode>resolveCiFriendliesOnly</flattenMode>
</configuration>
<executions>
<execution>
<id>flatten</id>
<phase>process-resources</phase>
<goals>
<goal>flatten</goal>
</goals>
</execution>
<execution>
<id>flatten.clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
即使我建議您至少同時構建A和B,您也應該能夠使用mvn clean package -pl module-A
獨立構建項目。
在Maven中,通常有兩個選擇:
無論哪種情況,都可以通過使用pom.xml
Maven依賴關系來描述依賴關系。
多模塊項目通常是一次性構建的,因此編譯所有代碼,並對所有三個模塊使用相同的版本號。 這將違反您的“根據最新的穩定版本進行構建”的想法,因為在構建時始終依賴於最新版本的A。
如果您定義了三個不同的項目,則沒有這些限制(並且C似乎還是獨立的)。 仍然存在兩個問題:您需要更新依賴項中A的版本-可以使用版本插件來完成。 您想要構建“一鍵構建”。 最簡單的方法可能是Jenkins(或任何構建服務器)中的管道,但是您也可以編寫一個調用Maven三次的Shell腳本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.