springboot mvn 打包,jar和资源文件分离打包

默认打包方式如下:

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

新打包方式

1、添加资源引用

包含如下保和文件格式

        <resources>
            <resource>
                <directory>src/main/java</directory>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**.*</include>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                    <include>**/*.*</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>

2、jar打包插件

一定需要添加启动类<mainClass>com.xxx.xxx.xxx</mainClass>自己修改


            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <!-- 包含文件配置,现在只打包 com 文件夹 -->
                    <includes>
                        <include>
                            **/com/**
                        </include>
                    </includes>

                    <archive>
                        <manifest>
                            <!-- 配置加入依赖包 -->
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <useUniqueVersions>false</useUniqueVersions>
                            <!-- Spring Boot 启动类(自行修改) -->
                            <mainClass>com.xxx.xxx.xxx</mainClass>
                        </manifest>
                        <manifestEntries>
                            <!-- 外部资源路径加入 manifest.mf 的 Class-Path -->
                            <Class-Path>resources/</Class-Path>
                        </manifestEntries>
                    </archive>
                    <!-- jar 输出目录 -->
                    <outputDirectory>${project.build.directory}/build/</outputDirectory>
                </configuration>
            </plugin>

3、依赖库打包

把依赖文件打包到lib目录

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <!-- 复制依赖 -->
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <!-- 依赖包 输出目录 -->
                            <outputDirectory>${project.build.directory}/build/lib</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

4、资源打包

导报到resources目录下面

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <!-- 复制资源 -->
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <resources>
                                <resource>
                                    <directory>src/main/resources</directory>
                                </resource>
                            </resources>
                            <!-- 资源文件 输出目录 -->
                            <outputDirectory>${project.build.directory}/build/resources</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

最终打包格式

<build>
        <!-- 为jar包取名 -->
        <finalName>${project.artifactId}</finalName>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**.*</include>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                    <include>**/*.*</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <!-- 包含文件配置,现在只打包 com 文件夹 -->
                    <includes>
                        <include>
                            **/com/**
                        </include>
                    </includes>

                    <archive>
                        <manifest>
                            <!-- 配置加入依赖包 -->
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <useUniqueVersions>false</useUniqueVersions>
                            <!-- Spring Boot 启动类(自行修改) -->
                            <mainClass>com.xx.xxx.xxx</mainClass>
                        </manifest>
                        <manifestEntries>
                            <!-- 外部资源路径加入 manifest.mf 的 Class-Path -->
                            <Class-Path>resources/</Class-Path>
                        </manifestEntries>
                    </archive>
                    <!-- jar 输出目录 -->
                    <outputDirectory>${project.build.directory}/build/</outputDirectory>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <!-- 复制依赖 -->
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <!-- 依赖包 输出目录 -->
                            <outputDirectory>${project.build.directory}/build/lib</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <!-- 复制资源 -->
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <resources>
                                <resource>
                                    <directory>src/main/resources</directory>
                                </resource>
                            </resources>
                            <!-- 资源文件 输出目录 -->
                            <outputDirectory>${project.build.directory}/build/resources</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
 </build>

然后再命令窗口进行打包操作

mvn clean package -Dmaven.test.skip=true

打包目录如下,在target下面,build 目录下面包含两个文件夹和一个jar包,lib存储依赖的包,resources包含着配置资源,具体如下展示

执行:

java -Dfile.encoding=utf-8 -jar xxxxx.jar

<think>好的,我现在需要回答用户关于如何打包Spring Boot微服务项目的问题。首先,我得回顾一下用户提供的引用内容,特别是引用[4]里的信息。那里提到了打包插件注意事项。用户可能想知道具体的步骤,所以应该分步骤说明。 首先,用户可能需要在pom.xml中添加Spring Boot Maven插件。引用[4]中的代码示例展示了插件的配置,所以需要强调这部分。接着,用户可能需要了解如何执行打包命令,比如使用mvn clean package。然后,打包后的JAR文件位置运行方式也很重要,需要提到target目录java -jar命令。 另外,用户提到了微服务项目,可能涉及多模块的情况。引用[4]提到资源文件子项目不能引入打包插件,否则会导致依赖问题。这部分需要特别注意,要提醒用户只在可执行模块中添加插件,其他作为依赖的模块保持普通jar包格式。 可能还需要提到Docker部署,虽然用户的问题主要关于打包,但引用[4]的标题提到了docker部署,或许可以简要说明,比如如何创建Dockerfile,但可能用户当前的问题不需要深入这部分,所以放在相关扩展问题里更合适。 另外,检查依赖是否正确打包的方法,如用压缩工具查看jar包内容,这也是用户需要注意的点,应该在步骤中提及。确保所有依赖都被正确包含,避免运行时找不到类的问题。 最后,生成相关问题时要围绕打包、多模块配置、Docker部署依赖管理这些方面,帮助用户进一步探索。</think>### 如何打包Spring Boot微服务项目? #### 1. 添加打包插件 在**可执行模块**的`pom.xml`中添加Spring Boot Maven插件(其他作为依赖的模块**不要添加**此插件): ```xml <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> ``` 该插件会将依赖库、配置文件启动类打包为可执行JAR[^4]。 #### 2. 执行打包命令 在项目根目录下运行: ```bash mvn clean package -DskipTests ``` 打包完成后会在各模块的`target/`目录生成: - 普通模块:`模块名.jar`(无依赖) - 可执行模块:`模块名-exec.jar`(包含所有依赖) #### 3. 验证打包结果 用压缩工具打开`*-exec.jar`,检查: - `BOOT-INF/lib/`目录应包含所有依赖JAR - `META-INF/MANIFEST.MF`需指定`Main-Class``Start-Class` - 配置文件应位于`BOOT-INF/classes/` #### 4. 运行验证 ```bash java -jar 模块名-exec.jar ``` #### 注意事项 1. 多模块项目中,被依赖的**工具类模块**应保持标准JAR格式,不添加Spring Boot插件 2. 配置分离建议: ```xml <configuration> <excludeDevtools>true</excludeDevtools> <layers> <enabled>true</enabled> </layers> </configuration> ``` 支持分层打包优化Docker镜像构建[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值