Mr. Cappuccino’s 46th cup of coffee - Maven multi-module project pluggable packaging and deployment solution

need

The early [train-hubs] and [train-hubs-ztrip] were two independent projects. We hope to merge the two projects into one through this optimization and transformation, but without affecting the previous functions. Previous function: One environment deployed two services (that is to say, this environment has all the functions of these two services), but the other service only needs to provide the function of [train-hubs-ztrip]. Therefore, during the transformation, we need to first build a suitable project structure so that the above functions can be realized and the modules can be plugged and deployed.

Preparation before research

First prepare a multi-module project according to the general idea to facilitate the research of deployment solutions. Below we assume that [maven-inside] is the early [train-hubs-ztrip], [maven-outside] is the early [train-hubs], [maven-common] is [maven-inside] and [maven-outside] Commonly dependent modules (abstraction layer), [maven-jar] depends on [maven-inside] and [maven-outside] for pluggable functional effect implementation.

Project structure

Insert image description here

Dependencies between modules

Insert image description here

Project pom file

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>
Project code

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();
    }
}

Code running effect

Call the test interface class after starting the project

Insert image description here
Insert image description here

Program research

Effects to be achieved

Complete packaging: It can not only deploy services with the functions of both [maven-inside] and [maven-outside] modules;
plug-in packaging: it can also deploy services with only the function of [maven-inside] module;

solution

Packaging and deployment by specifying different pom.xml files

Code

Add inside-pom.xml under the maven-jar module

<?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>

Add inside-pom.xml under the maven-package parent module

<?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>

Add install.sh under the maven-package parent module

#!/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
Package running effect
Complete package testing
sh install.sh

Insert image description here

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] ------------------------------------------------------------------------

Insert image description here
Run the Jar package in the maven-jar directory

java -jar maven-jar-1.0-SNAPSHOT.jar

Test effect: can have the functions of two modules

Insert image description here
Insert image description here

Plug-in packaging test
sh install.sh i

Insert image description here

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] ------------------------------------------------------------------------

Insert image description here
Run the Jar package in the maven-jar directory

java -jar maven-jar-1.0-SNAPSHOT.jar

Test effect: only has the functions of the [maven-inside] module

Insert image description here
Insert image description here

Best Practices

Project structure

Insert image description here

Test running effect

Insert image description here

Complete package testing

Jenkins configuration

Insert image description here

Test results after project launch

Insert image description here

Plug-in packaging test

Jenkins configuration

Insert image description here

Insert image description here

Insert image description here

Test results after project launch

Insert image description here

Guess you like

Origin blog.csdn.net/sinat_41888963/article/details/128873494