Springboot项目有多种打包方法,可以直接打成一个完整jar包,由于spring cloud微服务的流行,这种方法也越来越多,当然这种方法也很简单。但是单个项目中实际部署需要修改某些参数配置,如果如此重复打包那就太麻烦了
Springboot项目配置文件、依赖分离打包(一)

# Pom.xml文件配置

pom文件中build属性的配置

<build>
    <!-- 打包后的启动jar名称 -->
    <finalName>${project.artifactId}</finalName>

    <!-- 资源过滤(保持不变) -->
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <!-- 开启过滤,替换占位符 -->
            <filtering>true</filtering>
            <includes>
               <!-- 只对配置文件进行过滤,避免二进制文件被破坏 -->
                <include>**/*.yml</include>
                <include>**/*.yaml</include>
                <include>**/*.properties</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <!-- 对二进制文件关闭过滤,直接复制 -->
            <filtering>false</filtering>
            <excludes>
                <exclude>**/*.yml</exclude>
                <exclude>**/*.yaml</exclude>
                <exclude>**/*.properties</exclude>
            </excludes>
        </resource>
    </resources>

    <plugins>
        <!-- 1. 禁用 Spring Boot 的 repackage(关键!) -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>3.3.5</version>
            <configuration>
                    <!-- 关键:3.x版本用layout指定为ZIP,避免归档格式错误 -->
                    <layout>ZIP</layout>
                    <!-- 不包含依赖到业务Jar中 -->
                    <includes>
                        <include>
                            <groupId>empty</groupId>
                            <artifactId>empty</artifactId>
                        </include>
                    </includes>

                    <!-- 主类(替换为你的模块主启动类) -->
                    <mainClass>com.yiyang.system.YiYangSystemApplication</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <phase>package</phase>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
        </plugin>

        <!-- 2. 手动复制依赖到 lib/(包含传递依赖) -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>3.6.1</version>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                   <!-- 先执行依赖复制,再执行repackage -->
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        <!--主动包含compile范围的依赖(包含compile/runtime)  使用 runtime 范围(包含 compile + runtime) -->
                        <includeScope>runtime</includeScope>
                        <excludeTypes>system</excludeTypes>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <!-- 3. (可选)复制配置文件到 config/ -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.3.1</version>
            <executions>
                <execution>
                    <id>copy-config</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/config</outputDirectory>
                        <resources>
                            <resource>
                                <directory>src/main/resources</directory>
                                <filtering>true</filtering>
                                <!-- 排除二进制文件 -->
                                <excludes>
                                    <exclude>mapper/**</exclude>
                                    <exclude>**/*.xdb</exclude>
                                    <exclude>**/*.jar</exclude>
                                    <exclude>**/*.dll</exclude>
                                    <exclude>**/*.so</exclude>
                                    <exclude>**/*.bin</exclude>
                                    <exclude>**/*.xlsx</exclude>
                                    <exclude>**/*.xls</exclude>
                                </excludes>
                            </resource>
                            <!-- 单独处理二进制文件,不进行过滤 -->
                            <resource>
                                <directory>src/main/resources</directory>
                                <filtering>false</filtering>
                                <includes>
                                    <include>**/*.xdb</include>
                                    <include>**/*.xlsx</include>
                                    <include>**/*.xls</include>
                                </includes>
                                <excludes>
                                    <exclude>mapper/**</exclude>
                                </excludes>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <!-- 4. (重要)配置 MANIFEST.MF,支持 java -jar 启动 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.3.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>com.yiyang.system.YiYangSystemApplication</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>