簡體   English   中英

Spring 引導多模塊 maven 項目沒有存儲庫

[英]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 編譯的期望逐步

  1. 檢查是否有project-1的依賴項
  2. Go 到../lib-project
  3. 在目標文件夾(或與我們的項目相關的任何位置)中編譯並構建它
  4. 將此生成的 jar 添加到“project-1”依賴項
  5. 編譯並構建“project-1”jar 文件。

父 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.

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