Mr. Cappuccino的第46杯咖啡——Maven多模块项目可插拔式打包部署方案

news2025/7/22 20:45:29

Maven多模块项目可插拔式打包部署方案

      • 需求
      • 调研前准备
          • 项目结构
          • 模块之间的依赖关系
          • 项目pom文件
          • 项目代码
          • 代码运行效果
      • 方案调研
          • 需要实现的效果
          • 解决方案
          • 代码实现
          • 打包运行效果
            • 完整打包测试
            • 插拔式打包测试
      • 最佳实践
          • 项目结构
          • 测试运行效果
            • 完整打包测试
            • 插拔式打包测试

需求

早期的【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配置

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

项目启动后的测试效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/395000.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

吐血整理,自动化测试pytest测试框架,资深测试带你少走弯路......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 Pytest框架详解 py…

ledcode----丢失的数字

目录 题目截图&#xff1a; 题目接口&#xff1a; 第一种解法&#xff1a; 思路&#xff1a; 第二种解法&#xff1a;差值法 思路&#xff1a; 第三种解法&#xff1a;位运算异或法 关于异或操作符的预备知识&#xff1a; 思路&#xff1a; 例子&#xff1a;输入数组[0…

海思3531a pjsip交叉编译

学习文档&#xff1a; PJSUA2 Documentation — PJSUA2 Documentation 1.0-alpha documentationhttps://www.pjsip.org/docs/book-latest/html/index.html ./configure --prefix/opensource/pjproject-2.12/build3531a \ --host/opt/hisi-linux/x86-arm/arm-hisi…

MySQL全解[集群篇]

目录日志错误日志二进制日志格式查看删除查询日志慢查询日志主从复制原理docker搭建分库分表拆分策略垂直拆分垂直分库垂直分表水平拆分水平分库水平分表实现技术MyCat2mysql2对比mycat1.xdocker运行mycat2日志 错误日志 错误日志是 MySQL 中最重要的日志之一&#xff0c;它记…

NYUv2生成边界GT(2)

由NYUv2生成边界GT(1)可知&#xff0c;我们每张GT图片都生成一个对应的.bin文件。存放在D:\datasets\data_proc\train\edge_labels_40文件夹下&#xff0c;下一步我们需要生成.png文件&#xff0c;即需要使用convert_bin_to_png.py。 # -*- coding: utf-8 -*- import numpy as…

【Azure 架构师学习笔记】-Azure Storage Account(1)- Queue Storage

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Storage Account】系列。 接上文 【Azure 架构师学习笔记】-Azure Storage Account&#xff08;1&#xff09;-类型简介 前言 Azure Storage Queues 是一个专门用来处理基于云环境队列的Azure 服务。每个队列都维护着…

Netty之ChannelHandler初解

目录 目标 Netty版本 Netty官方API 实战 Netty服务器 入栈ChannelHandler读入数据顺序案例 出栈ChannelHandler写出数据顺序案例 ChannelHandlerContext和NioSocketChannel写入数据时有什么不同 Pipeline添加多个ChannelHandler有什么意义 目标 掌握ChannelHandler基…

海康工业相机使用教程

工业相机使用一、硬件连接1、准备材料2、相机供电&#xff08;1&#xff09;区分电源适配器正负极&#xff08;2&#xff09;连接相机电源线缆&#xff08;3&#xff09;连接完成后&#xff0c;相机蓝色灯常亮则成功3、软件连接&#xff08;1&#xff09;MVS客户端下载地址&…

你真的会在阳光下拍照片么?

你好&#xff0c;我是小麥。 上节课我们讲了如何通过影子判断光的质量&#xff0c;也就是光的软硬&#xff0c;这节课我们来接着说一说光的方向和环境光的实际运用。 虽然在现实生活里&#xff0c;我们可能没有从软硬的角度观察过光线&#xff0c;但我相信你在拍照片的时候一…

第九章:Java集合

第九章&#xff1a;Java集合 9.1&#xff1a;Java集合框架概述 数组、集合都是对多个数据进行存储(内存层面&#xff0c;不涉及持久化)操作的结构&#xff0c;简称Java容器。 数组存储多个数据方面的特点 一旦初始化以后&#xff0c;其长度就确定了。数组一旦定义好&#xff…

计算机操作系统:实验三存储管理程序设计

一、目的和要求 目的 存储管理的主要功能之一是合理地分配主存空间。请求页式管理是一种常用的虚拟存储管理技术。 本实验的目的是通过请求页式存储管理中页面置换算法的模拟设计&#xff0c;来了解虚拟存储技术的特点&#xff0c;掌握请求页式存储管理的页面置换算法。 要求…

数字工厂管理系统的应用案例

数字工厂管理系统是制造企业应用数字化工厂技术实现研发设计数字化、生产准备数字化、 生产制造数字化、运营管理数字化和营销服务数字化的重要手段&#xff0c;即通过应用数字相关技术提升产品全生命周期数字化水平&#xff0c;从而提升企业经营的可靠性、安全性和经济性。 任…

C++回顾(十)—— 多态

10.1 问题引出 10.1.1 如果子类定义了与父类中原型相同的函数会发生什么&#xff1f; 函数重写 在子类中定义与父类中原型相同的函数&#xff0c;函数重写只发生在父类与子类之间 重载与重写区别&#xff1a; &#xff08;1&#xff09;重载&#xff1a;同一个作用域&#xf…

A、力扣刷题——数组

提示&#xff1a;这是力扣上数组类题目里的简单题&#xff0c;按顺序做下来的23道题。 第一题&#xff1a; 关键词&#xff1a;原地修改&#xff0c;有序数组 我的答案&#xff1a; &#xff08;for循环&#xff09; &#xff08;1&#xff09;有序数组 class Solution{pu…

平安大视野前瞻2023投资策略:资产格局“危中有机”,关注科技、绿色、安全领域

3月3日&#xff0c;平安私人银行全新云端沙龙《平安大视野》第一站在杭州举办&#xff0c;活动聚焦2023年宏观经济展望&#xff0c;邀请中国首席经济学家论坛理事、鹏扬基金首席经济学家陈洪斌&#xff0c;平安私人银行首席策略分析师彭伟伟就国内外宏观经济变化和资产配置策略…

干货系列:高通量测序后的下游实验验证方法——m6A RNA甲基化篇|易基因

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。此前&#xff0c;我们分享了m6A RNA甲基化研究的数据挖掘思路&#xff08;点击查看详情&#xff09;&#xff0c;进而筛选出m6A修饰目标基因。做完MeRIP-seq测序后&#xff0c;如果需要对分…

【JavaWeb】Servlet详解

文章目录1. 前置知识2.servlet生命周期2.1 默认情况下&#xff0c;服务器启动时&#xff0c;servlet对象并没有被创建2.2 用户执行一次请求2.3用户执行第二次请求2.4 3,4,5,6....次请求2.5 关闭服务器3.servlet方法解析4.适配器模式改造servlet4.1不使用servlet模式4.2使用适配…

【微服务】(十五)—— Seata 的部署和集成

文章目录1. 部署Seata的tc-server1.1 下载Seata1.2 解压1.3 修改配置1.4 在nacos添加配置1.5 创建数据库表1.6 启动TC服务2. 微服务集成seata2.1 引入依赖2.2 修改配置文件3. TC服务的高可用和异地容灾3.1 模拟异地容灾的TC集群3.2 将事务组映射配置到nacos3.3 微服务读取nacos…

软测入门(八)Selenium项目实战

自动化项目实战 项目计划设计 测试计划测试范围设定目标规划活动 实际项目中&#xff0c;需要根据项目的实际情况创建自己的项目计划&#xff0c;没有固定的格式和内容要求&#xff1a; 项目简介自动化实现网上购票项目启动前置条件1.购票网站工作正常 2.自动化测试环境准备…

JAVA的16 个实用代码优化小技巧

一、类成员与方法的可见性最小化 举例&#xff1a;如果是一个private的方法&#xff0c;想删除就删除。 如果一个public的service方法&#xff0c;或者一个public的成员变量&#xff0c;删除一下&#xff0c;不得思考很多。 二、使用位移操作替代乘除法 计算机是使用二进制…