微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring Boot 多模块 Maven 项目,无需存储库

如何解决Spring Boot 多模块 Maven 项目,无需存储库

我有多个spring boot项目,每个项目都是独立的,都有自己的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. 的依赖项
  3. 转到../lib-project
  4. 在目标文件夹(或与我们项目相关的任何位置)编译并构建它
  5. 将此生成的 jar 添加到“project-1”依赖项
  6. 编译并构建“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>

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 boot项目,每个项目都是独立的,都有自己的CICD管道。

这些项目需要一些通用的类,我用通用类创建了一个单独的项目。

恭喜,您的项目不再独立了!

根据上面的定义,这里是依赖项:

  • lib-project 依赖于 parent;
  • project-1 依赖于 parent;
  • project-1 取决于 lib-project

请查看 Introduction to the POMGuide to Working with Multiple Modules 以了解关于 Maven 项目中的依赖项的讨论。


我不能使用任何本地或远程存储库,使用 mvn clean install 将依赖的 jar 放在 m2 中,然后将其称为依赖

鉴于此限制和上面列出的依赖项,所有项目的 POM 和源文件必须存在于磁盘上以用于构建目的。构建过程必须从 parent 文件夹开始。构建过程必须同时构建所有模块。

此外,请考虑使用 mvn clean verify 而不是 mvn clean install 以避免使用您正在构建的工件填充本地存储库

,

Maven 项目并非旨在按需构建其依赖项。但是,当更改推送到上游依赖项时,jenkins 可以配置为构建下游项目。

我还通过在相关 jenkinsfile 中的父 pom 上使用 -pl 选项来构建子项目的子集来解决此问题

詹金斯档案

conda install cudatoolkit

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。