![](/img/trans.png)
[英]Compiling multi module maven projects without installing to local repository
[英]Spring boot multi module maven projects without repository
我有多個 spring 引導項目,每個項目都是獨立的並且有自己的 CICD 管道。
這些項目需要一些公共類,我創建了一個帶有公共類的單獨項目。
Parent
pom.xml (with packaging)
lib-project
pom.xml
project-1
pom.xml
project-2
pom.xml
我可以從父目錄輕松構建項目,它構建了所有項目
parent$ mvn clean package
它生成所有 jar 文件並將它們放在各自的項目目標文件夾中
我的問題是我不能在父級別啟動它,這必須從每個項目中從它自己的管道啟動。
和
我不能使用任何本地或遠程存儲庫,使用mvn clean install
將依賴的 jar 放在 m2 中,然后將其稱為依賴項
我想從相關項目目錄構建它
parent/project-1$ mvn clean package
它顯示以下錯誤:
Could not resolve dependencies for project com.test.multiple:project-1:jar:0.0.1-SNAPSHOT: Could not find artifact com.test.multiple:lib-project:jar:0.0.1-SNAPSHOT
我對 project-1 編譯的期望逐步
父 Pom 配置
<project ...>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.test.multiple</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>lib-project</module>
<module>project-1</module>
</modules>
</project>
** Lib 項目 pom **
<project ...>
<parent>
<groupId>com.test.multiple</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.test.multiple</groupId>
<artifactId>lib-project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>lib-project</name>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
項目 1 pom
<project ...>
<parent>
<groupId>com.test.multiple</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.test.multiple</groupId>
<artifactId>project-1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>project-1</name>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.test.multiple</groupId>
<artifactId>lib-project</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我有多個 spring 引導項目,每個項目都是獨立的並且有自己的 CICD 管道。
這些項目需要一些公共類,我創建了一個帶有公共類的單獨項目。
恭喜,你的項目不再獨立了!
鑒於上述定義,以下是依賴項:
lib-project
依賴於parent
;project-1
依賴於parent
;project-1
依賴於lib-project
。有關 Maven 項目中依賴關系的討論,請查看POM 簡介和使用多個模塊的指南。
我不能使用任何本地或遠程存儲庫,使用
mvn clean install
將依賴的 jar 放在 m2 中,然后將其稱為依賴項
鑒於此限制和上面列出的依賴關系,所有項目的 POM 和源文件都必須存在於磁盤上以用於構建目的。 構建過程必須從parent
文件夾開始。 構建過程必須一次構建所有模塊。
此外,請考慮使用mvn clean verify
而不是mvn clean install
以避免使用您正在構建的工件填充本地存儲庫。
maven 項目並非旨在按需構建其依賴項。 但是,jenkins 可以配置為在將更改推送到上游依賴項時構建下游項目。
我還通過在相關 jenkinsfile 中的父 pom 上使用 -pl 選項來構建子項目的子集,從而解決了這個問題
詹金斯文件
clone parent project
mvn clean package -pl core,deployable
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.