Mr. Cappuccino的第46杯咖啡——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配置

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

项目启动后的测试效果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sinat_41888963/article/details/128873494