Java 没有存储库的Spring boot多模块maven项目
我有多个spring boot项目,每个项目都是独立的,都有自己的CICD管道 这些项目需要一些公共类,我用公共类创建了一个单独的项目Java 没有存储库的Spring boot多模块maven项目,java,spring-boot,maven,multi-module,Java,Spring Boot,Maven,Multi Module,我有多个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文
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中,然后将其称为依赖项
我想从relavent项目目录构建它
parent/project-1$ mvn clean package
它显示以下错误:
无法解析项目com.test的依赖项。多个:项目-1:jar:0.0.1-SNAPSHOT:找不到工件com.test。多个:lib项目:jar:0.0.1-SNAPSHOT
我对project-1编写的逐步期望
<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>
4.0.0
org.springframework.boot
spring启动程序父级
2.4.3
com.test.multiple
父母亲
0.0.1-快照
聚甲醛
lib项目
项目-1
**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>
com.test.multiple
父母亲
0.0.1-快照
com.test.multiple
lib项目
0.0.1-快照
lib项目
11
org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
弹簧起动试验
测试
项目-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>
com.test.multiple
父母亲
0.0.1-快照
com.test.multiple
项目-1
0.0.1-快照
项目-1
11
org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
弹簧起动试验
测试
com.test.multiple
lib项目
${project.version}
org.springframework.boot
springbootmaven插件
maven项目的设计目的不是按需构建其依赖项。但是,jenkins可以配置为在将更改推送到上游依赖项时构建下游项目
我还通过在相关Jenkins文件中的父pom上使用-pl选项来构建子项目的子集来解决这个问题
詹金斯档案
clone parent project
mvn clean package -pl core,deployable
我有多个spring boot项目,每个项目都是独立的,都有自己的CICD管道
这些项目需要一些公共类,我用公共类创建了一个单独的项目
Parent
pom.xml (with packaging)
lib-project
pom.xml
project-1
pom.xml
project-2
pom.xml
恭喜你,你的项目不再独立了
根据上述定义,以下是依赖项:
依赖于父项目李>lib项目
取决于project-1
李>parent
依赖于project-1
lib-project
我不能使用任何本地或远程存储库,使用
mvn clean install
将依赖jar放入m2中,然后将其称为依赖项
考虑到这一限制和上面列出的依赖项,所有项目的POM和源文件都必须存在于磁盘上,以便进行构建。生成过程必须从父文件夹开始。构建过程必须同时构建所有模块
此外,请考虑使用<代码> MVN“干净验证< /代码>,而不是<代码> MVN CurrySuths<代码>,以避免使用您正在构建的工件填充<强>本地存储库< /强>。
“我不能使用任何本地或远程存储库,使用MVN Cudio安装将依赖的jar放在M2中,然后将其称为依赖项”。那么你需要解决这个问题。其他一切都将是一个丑陋的黑客。抱歉,限制是它只能从项目文件夹中启动。它听起来不像maven可以按照你想要的方式做你想做的事情。这就是为什么您可能需要以不同的方式处理问题。