【发布时间】:2016-09-25 17:50:57
【问题描述】:
假设我们有一个共享库包。相同的pom如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.project.microservice-a</groupId>
<artifactId>shared-lib</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>shared-lib</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<start-class>com.projects.lib1.Application</start-class>
<java.version>1.8</java.version>
</properties>
....
....
</project>
有项目使用上述共享库,有以下pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.projects.microservice</groupId>
<artifactId>accounts</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>accounts</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.3.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>com.project.microservice-a</groupId>
<artifactId>shared-lib</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
....
<dependencies>
然后有一个特殊的子系统在 Spring-boot-starter-parent.1.3.5 作为父级运行,它不会与 Spring-boot-starter-parent-1.2.3 一起使用 shared-lib。
使用Spring-boot.1.3.5导入shared-lib,需要修改pom.xml的parent为Spring 1.3.5版本,然后构建。这会在构建所有子系统时导致维护问题,因为 Jenkins CI 使用主分支从 Github 构建所有 JAR。我们可以手动指定一个单独的分支,但是为两个分支维护相同的代码是简单的重复。
任何人都可以提出一个解决方案,IMO 可能是实现其中之一的方法:
创建一个嵌入 Spring 1.2.3 和 Spring 1.3.5 的包,并在其他子系统中指定所需的依赖版本。
使用 Spring Boot 1.3.5 构建原始客户端包,并在所需子系统中使用依赖项时强制它使用旧版本的 Spring Boot。
【问题讨论】:
-
我不明白您的问题...您是否希望在同一个项目中使用两个不同版本的 Spring Boot,具体取决于...?它是一个多模块 maven 项目吗?
-
@jcgarcia :改进了问题。顺便说一句,有一个共享项目与其他两个项目用作依赖项,但两个项目都有不同的 Spring Boot 版本。所以我希望在两个版本中都构建 shared-lib,而不需要维护重复的代码。
标签: java spring maven spring-mvc spring-boot