Maven多模块项目可插拔式打包部署方案
需求
早期的【train-hubs】和【train-hubs-ztrip】是两个独立的项目,我们希望能够通过这次优化改造将两个项目合并成一个项目,但是不能影响到之前的功能。之前的功能:一个环境部署了两个服务(也就是说这个环境拥有这两个服务的全部功能),但是另外一个服务只需要提供【train-hubs-ztrip】的功能。因此,在改造时我们需要先搭建一套合适的项目结构,以致于能够实现上述的功能,达到模块可插拔部署的目的。
调研前准备
先按照大致的思想准备一个多模块项目,方便部署方案的研究。下面我们假设【maven-inside】为前期的【train-hubs-ztrip】,【maven-outside】为前期的【train-hubs】,【maven-common】为【maven-inside】和【maven-outside】共同依赖的模块(抽象层),【maven-jar】依赖于【maven-inside】和【maven-outside】用于可插拔的功能效果实现。
项目结构
模块之间的依赖关系
项目pom文件
maven-package/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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.maven</groupId>
<artifactId>maven-package</artifactId>
<packaging>pom</packaging>
<version>${revision}</version>
<modules>
<module>maven-common</module>
<module>maven-jar</module>
<module>maven-outside</module>
<module>maven-inside</module>
</modules>
<properties>
<revision>1.0-SNAPSHOT</revision>
<lombok-version>1.16.20</lombok-version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 解决maven使用revision作为版本号部署错误的问题 -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>1.2.7</version>
<configuration>
<updatePomFile>true</updatePomFile>
<flattenMode>resolveCiFriendliesOnly</flattenMode>
</configuration>
<executions>
<execution>
<id>flatten</id>
<phase>process-resources</phase>
<goals>
<goal>flatten</goal>
</goals>
</execution>
<execution>
<id>flatten.clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
maven-package/maven-common/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>maven-package</artifactId>
<groupId>com.maven</groupId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>maven-common</artifactId>
<packaging>jar</packaging>
</project>
maven-package/maven-inside/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>maven-package</artifactId>
<groupId>com.maven</groupId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>maven-inside</artifactId>
<dependencies>
<dependency>
<groupId>com.maven</groupId>
<artifactId>maven-common</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
maven-package/maven-outside/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>maven-package</artifactId>
<groupId>com.maven</groupId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>maven-outside</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.maven</groupId>
<artifactId>maven-common</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
maven-package/maven-jar/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>maven-package</artifactId>
<groupId>com.maven</groupId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>maven-jar</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.maven</groupId>
<artifactId>maven-outside</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.maven</groupId>
<artifactId>maven-inside</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
项目代码
AbstractBooking.java
package com.common;
/**
* @author honey
* @date 2023-01-30 18:58:40
*/
public abstract class AbstractBooking {
/**
* 创建订单
* @return String
*/
public abstract String createOrder();
}
InsideBookingStrategy.java
package com.inside;
import com.common.AbstractBooking;
/**
* @author honey
* @date 2023-01-30 18:57:03
*/
public class InsideBookingStrategy extends AbstractBooking {
@Override
public String createOrder() {
return "inside";
}
}
OutsideBookingStrategy.java
package com.outside;
import com.common.AbstractBooking;
/**
* @author honey
* @date 2023-01-30 18:57:03
*/
public class OutsideBookingStrategy extends AbstractBooking {
@Override
public String createOrder() {
return "outside";
}
}
DemoController.java
package com.maven.controller;
import com.common.AbstractBooking;
import org.springframework.context.ApplicationContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author honey
* @date 2023-01-31 14:58:30
*/
@RestController
public class DemoController {
@Resource
private ApplicationContext applicationContext;
@GetMapping("/demo")
public String demo(String strategy) {
// insideBookingStrategy
AbstractBooking abstractBooking = applicationContext.getBean(strategy, AbstractBooking.class);
return abstractBooking.createOrder();
}
}
代码运行效果
启动项目后调用测试接口类
方案调研
需要实现的效果
完整打包:既能部署出同时拥有【maven-inside】和【maven-outside】两个模块功能的服务;
插拔式打包:又能部署只拥有【maven-inside】这一个模块功能的服务;
解决方案
通过指定不同的pom.xml文件进行打包部署
代码实现
在maven-jar模块下新增inside-pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>maven-package</artifactId>
<groupId>com.maven</groupId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>maven-jar</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.maven</groupId>
<artifactId>maven-inside</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
在maven-package父模块下新增inside-pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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.maven</groupId>
<artifactId>maven-package</artifactId>
<packaging>pom</packaging>
<version>${revision}</version>
<modules>
<module>maven-common</module>
<module>maven-inside</module>
</modules>
<properties>
<revision>1.0-SNAPSHOT</revision>
<lombok-version>1.16.20</lombok-version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 解决maven使用revision作为版本号部署错误的问题 -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>1.2.7</version>
<configuration>
<updatePomFile>true</updatePomFile>
<flattenMode>resolveCiFriendliesOnly</flattenMode>
</configuration>
<executions>
<execution>
<id>flatten</id>
<phase>process-resources</phase>
<goals>
<goal>flatten</goal>
</goals>
</execution>
<execution>
<id>flatten.clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
在maven-package父模块下新增install.sh
#!/bin/sh
# shellcheck disable=SC2039
if [ "$1" == "i" ];then
mvn clean install -f inside-pom.xml;
mvn clean install -f maven-jar/inside-pom.xml
else
mvn clean install -pl maven-jar -am
fi
# sh install.sh i
# sh install.sh
打包运行效果
完整打包测试
sh install.sh
s@HONEYYXK-ID9999 MINGW64 /e/知识点资料(第二年)/Maven多模块项目打包部署方案/maven-package
$ sh install.sh
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] maven-package [pom]
[INFO] maven-common [jar]
[INFO] maven-outside [jar]
[INFO] maven-inside [jar]
[INFO] maven-jar [jar]
[INFO]
[INFO] ----------------------< com.maven:maven-package >-----------------------
[INFO] Building maven-package 1.0-SNAPSHOT [1/5]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ maven-package ---
[INFO]
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ maven-package ---
[INFO] Installing E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\pom.xml to D:\maven_jar\com\maven\maven-package\1.0-SNAPSHOT\maven-package-1.0-SNAPSHOT.pom
[INFO]
[INFO] -----------------------< com.maven:maven-common >-----------------------
[INFO] Building maven-common 1.0-SNAPSHOT [2/5]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ maven-common ---
[INFO] Deleting E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-common\target
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ maven-common ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-common\src\main\resources
[INFO] skip non existing resourceDirectory E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-common\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ maven-common ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-common\target\classes
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ maven-common ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-common\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ maven-common ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ maven-common ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:3.2.0:jar (default-jar) @ maven-common ---
[INFO] Building jar: E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-common\target\maven-common-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ maven-common ---
[INFO] Installing E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-common\target\maven-common-1.0-SNAPSHOT.jar to D:\maven_jar\com\maven\maven-common\1.0-SNAPSHO
T\maven-common-1.0-SNAPSHOT.jar
[INFO] Installing E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-common\pom.xml to D:\maven_jar\com\maven\maven-common\1.0-SNAPSHOT\maven-common-1.0-SNAPSHOT.p
om
[INFO]
[INFO] ----------------------< com.maven:maven-outside >-----------------------
[INFO] Building maven-outside 1.0-SNAPSHOT [3/5]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ maven-outside ---
[INFO] Deleting E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-outside\target
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ maven-outside ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ maven-outside ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-outside\target\classes
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ maven-outside ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-outside\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ maven-outside ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ maven-outside ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:3.2.0:jar (default-jar) @ maven-outside ---
[INFO] Building jar: E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-outside\target\maven-outside-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ maven-outside ---
[INFO] Installing E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-outside\target\maven-outside-1.0-SNAPSHOT.jar to D:\maven_jar\com\maven\maven-outside\1.0-SNAP
SHOT\maven-outside-1.0-SNAPSHOT.jar
[INFO] Installing E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-outside\pom.xml to D:\maven_jar\com\maven\maven-outside\1.0-SNAPSHOT\maven-outside-1.0-SNAPSHO
T.pom
[INFO]
[INFO] -----------------------< com.maven:maven-inside >-----------------------
[INFO] Building maven-inside 1.0-SNAPSHOT [4/5]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ maven-inside ---
[INFO] Deleting E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-inside\target
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ maven-inside ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ maven-inside ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-inside\target\classes
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ maven-inside ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-inside\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ maven-inside ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ maven-inside ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:3.2.0:jar (default-jar) @ maven-inside ---
[INFO] Building jar: E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-inside\target\maven-inside-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ maven-inside ---
[INFO] Installing E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-inside\target\maven-inside-1.0-SNAPSHOT.jar to D:\maven_jar\com\maven\maven-inside\1.0-SNAPSHO
T\maven-inside-1.0-SNAPSHOT.jar
[INFO] Installing E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-inside\pom.xml to D:\maven_jar\com\maven\maven-inside\1.0-SNAPSHOT\maven-inside-1.0-SNAPSHOT.p
om
[INFO]
[INFO] ------------------------< com.maven:maven-jar >-------------------------
[INFO] Building maven-jar 1.0-SNAPSHOT [5/5]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ maven-jar ---
[INFO] Deleting E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-jar\target
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ maven-jar ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ maven-jar ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-jar\target\classes
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ maven-jar ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-jar\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ maven-jar ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ maven-jar ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:3.2.0:jar (default-jar) @ maven-jar ---
[INFO] Building jar: E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-jar\target\maven-jar.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.3.0.RELEASE:repackage (repackage) @ maven-jar ---
[INFO] Replacing main artifact with repackaged archive
[INFO]
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ maven-jar ---
[INFO] Installing E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-jar\target\maven-jar.jar to D:\maven_jar\com\maven\maven-jar\1.0-SNAPSHOT\maven-jar-1.0-SNAPSH
OT.jar
[INFO] Installing E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-jar\pom.xml to D:\maven_jar\com\maven\maven-jar\1.0-SNAPSHOT\maven-jar-1.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for maven-package 1.0-SNAPSHOT:
[INFO]
[INFO] maven-package ...................................... SUCCESS [ 0.351 s]
[INFO] maven-common ....................................... SUCCESS [ 1.377 s]
[INFO] maven-outside ...................................... SUCCESS [ 0.421 s]
[INFO] maven-inside ....................................... SUCCESS [ 0.378 s]
[INFO] maven-jar .......................................... SUCCESS [ 1.491 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.398 s
[INFO] Finished at: 2023-02-03T18:34:18+08:00
[INFO] ------------------------------------------------------------------------
运行maven-jar目录下的Jar包
java -jar maven-jar-1.0-SNAPSHOT.jar
测试效果:能拥有两个模块的功能
插拔式打包测试
sh install.sh i
s@HONEYYXK-ID9999 MINGW64 /e/知识点资料(第二年)/Maven多模块项目打包部署方案/maven-package
$ sh install.sh i
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] maven-package [pom]
[INFO] maven-common [jar]
[INFO] maven-inside [jar]
[INFO]
[INFO] ----------------------< com.maven:maven-package >-----------------------
[INFO] Building maven-package 1.0-SNAPSHOT [1/3]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ maven-package ---
[INFO]
[INFO] --- flatten-maven-plugin:1.2.7:clean (flatten.clean) @ maven-package ---
[INFO]
[INFO] --- flatten-maven-plugin:1.2.7:flatten (flatten) @ maven-package ---
[INFO] Generating flattened POM of project com.maven:maven-package:pom:1.0-SNAPSHOT...
[INFO]
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ maven-package ---
[INFO] Installing E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\.flattened-pom.xml to D:\maven_jar\com\maven\maven-package\1.0-SNAPSHOT\maven-package-1.0-SNAPSHOT.p
om
[INFO]
[INFO] -----------------------< com.maven:maven-common >-----------------------
[INFO] Building maven-common 1.0-SNAPSHOT [2/3]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ maven-common ---
[INFO] Deleting E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-common\target
[INFO]
[INFO] --- flatten-maven-plugin:1.2.7:clean (flatten.clean) @ maven-common ---
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ maven-common ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-common\src\main\resources
[INFO] skip non existing resourceDirectory E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-common\src\main\resources
[INFO]
[INFO] --- flatten-maven-plugin:1.2.7:flatten (flatten) @ maven-common ---
[INFO] Generating flattened POM of project com.maven:maven-common:jar:1.0-SNAPSHOT...
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ maven-common ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-common\target\classes
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ maven-common ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-common\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ maven-common ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ maven-common ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:3.2.0:jar (default-jar) @ maven-common ---
[INFO] Building jar: E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-common\target\maven-common-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ maven-common ---
[INFO] Installing E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-common\target\maven-common-1.0-SNAPSHOT.jar to D:\maven_jar\com\maven\maven-common\1.0-SNAPSHO
T\maven-common-1.0-SNAPSHOT.jar
[INFO] Installing E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-common\.flattened-pom.xml to D:\maven_jar\com\maven\maven-common\1.0-SNAPSHOT\maven-common-1.0
-SNAPSHOT.pom
[INFO]
[INFO] -----------------------< com.maven:maven-inside >-----------------------
[INFO] Building maven-inside 1.0-SNAPSHOT [3/3]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ maven-inside ---
[INFO] Deleting E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-inside\target
[INFO]
[INFO] --- flatten-maven-plugin:1.2.7:clean (flatten.clean) @ maven-inside ---
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ maven-inside ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] Copying 1 resource
[INFO]
[INFO] --- flatten-maven-plugin:1.2.7:flatten (flatten) @ maven-inside ---
[INFO] Generating flattened POM of project com.maven:maven-inside:jar:1.0-SNAPSHOT...
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ maven-inside ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-inside\target\classes
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ maven-inside ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-inside\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ maven-inside ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ maven-inside ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:3.2.0:jar (default-jar) @ maven-inside ---
[INFO] Building jar: E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-inside\target\maven-inside-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ maven-inside ---
[INFO] Installing E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-inside\target\maven-inside-1.0-SNAPSHOT.jar to D:\maven_jar\com\maven\maven-inside\1.0-SNAPSHO
T\maven-inside-1.0-SNAPSHOT.jar
[INFO] Installing E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-inside\.flattened-pom.xml to D:\maven_jar\com\maven\maven-inside\1.0-SNAPSHOT\maven-inside-1.0
-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for maven-package 1.0-SNAPSHOT:
[INFO]
[INFO] maven-package ...................................... SUCCESS [ 0.967 s]
[INFO] maven-common ....................................... SUCCESS [ 1.224 s]
[INFO] maven-inside ....................................... SUCCESS [ 0.407 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.976 s
[INFO] Finished at: 2023-02-03T19:25:15+08:00
[INFO] ------------------------------------------------------------------------
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------< com.maven:maven-jar >-------------------------
[INFO] Building maven-jar 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ maven-jar ---
[INFO] Deleting E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-jar\target
[INFO]
[INFO] --- flatten-maven-plugin:1.2.7:clean (flatten.clean) @ maven-jar ---
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ maven-jar ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO]
[INFO] --- flatten-maven-plugin:1.2.7:flatten (flatten) @ maven-jar ---
[INFO] Generating flattened POM of project com.maven:maven-jar:jar:1.0-SNAPSHOT...
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ maven-jar ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-jar\target\classes
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ maven-jar ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-jar\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ maven-jar ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ maven-jar ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:3.2.0:jar (default-jar) @ maven-jar ---
[INFO] Building jar: E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-jar\target\maven-jar.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.3.0.RELEASE:repackage (repackage) @ maven-jar ---
[INFO] Replacing main artifact with repackaged archive
[INFO]
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ maven-jar ---
[INFO] Installing E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-jar\target\maven-jar.jar to D:\maven_jar\com\maven\maven-jar\1.0-SNAPSHOT\maven-jar-1.0-SNAPSH
OT.jar
[INFO] Installing E:\知识点资料(第二年)\Maven多模块项目打包部署方案\maven-package\maven-jar\.flattened-pom.xml to D:\maven_jar\com\maven\maven-jar\1.0-SNAPSHOT\maven-jar-1.0-SNAPSHOT
.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.623 s
[INFO] Finished at: 2023-02-03T19:25:22+08:00
[INFO] ------------------------------------------------------------------------
运行maven-jar目录下的Jar包
java -jar maven-jar-1.0-SNAPSHOT.jar
测试效果:只拥有【maven-inside】模块的功能
最佳实践
项目结构
测试运行效果
完整打包测试
Jenkins配置
项目启动后的测试效果
插拔式打包测试
Jenkins配置
项目启动后的测试效果