springboot项目打jar包,并排除相关配置文件

文章讨论了在使用SpringBoot的maven插件进行打包时,如何排除特定的配置文件。通过结合maven-jar-plugin,作者尝试排除配置文件并保持jar包的层级目录正确,以确保服务能正常启动。同时,提到了maven-surefire-plugin用于跳过测试文件的打包过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring-boot-maven-plugin可以打包,服务也可以正常启动,但是无法排除相应的配置文件;
maven-jar-plugin也可以的打包,但是排除文件后层级目录不对,jar包无法启动,因此需要两者结合使用
<build>
      <resources>
            <resource>
                <filtering>true</filtering>
                <directory>src/main/resources</directory>
                <excludes>
                    <exclude>**/application*.yml</exclude>
                    <exclude>**/application*.yaml</exclude>
                    <exclude>**/application*.properties</exclude>
                </excludes>
            </resource>
            <resource>
                <filtering>true</filtering>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/application.properties</include>
                    <include>**/application-${profiles.active}.properties</include>
                    <include>**/application.yml</include>
                    <include>**/application-${profiles.active}.yml</include>
                </includes>
            </resource>
        </resources>
      
        <plugins>
           <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
           <plugin>
                <!-- spingboot自带打包插件 -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.1.2.RELEASE</version>
            </plugin>
            <plugin>
                <!-- maven打包插件 -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <!-- 排除配置文件,排除的文件放在服务器和jar包同级目录的config目录下,
                服务启动会自带加载-->
                <configuration>
                    <excludes>
                        <exclude>*.yml</exclude>
                        <exclude>*.properties</exclude>
                    </excludes>
                </configuration>
            </plugin>

            <!-- 打包时不包含测试文件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.4.2</version>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.1.0</version>
            </plugin>
        </plugins>
    </build>
<think>好的,用户现在问的是如何配置Spring Boot项目打包JAR。之前的对话中他们遇到了Maven构建错误,现在可能已经解决了那个问题,现在想要进一步了解如何正确配置打包。 首先,我需要回想Spring Boot的标准配置方式。通常,Spring Boot使用Maven或Gradle作为构建工具,这里用户提到了Maven,所以应该以Maven为例。需要确认他们是否了解Spring Boot的默认打包插件,也就是spring-boot-maven-plugin,这个插件负责将项目打包成可执行的JAR。 然后,用户可能已经有一个基本的pom.xml,但可能需要检查是否正确配置了插件。我需要分步骤说明如何添加和配置这个插件,确保他们不会遗漏关键部分。比如,在pom.xml的build部分添加插件,并指定版本,或者继承父项目,可能父pom已经含了这些配置,但如果用户项目没有正确继承,可能需要显式配置。 另外,用户可能遇到的常见问题打包后的JAR无法运行,或者依赖没有正确含。这时候需要解释repackage目标的作用,以及如何通过Maven命令进行打包。可能还需要提到如何排除不需要的依赖,或者定制JAR的名称。 此外,用户可能想知道打包后的JAR结构和普通JAR的区别,比如BOOT-INF目录和MANIFEST.MF的位置。需要简要说明这些内容,帮助他们理解为什么Spring BootJAR可以独立运行。 还有,用户可能会混淆普通的JAR打包和可执行JAR的区别,需要强调spring-boot-maven-plugin的重要性,没有它的话,打包出来的JAR可能缺少必要的启动类和依赖。 最后,可能需要给出验证步骤,比如如何运行生成的JAR文件,以及如何检查JAR的内容是否正确。这可以帮助用户确认配置是否成功,避免再次出现之前的构建错误。</think>以下是Spring Boot项目打包为可执行JAR的完整配置指南(使用Maven构建工具): $$ \text{标准配置流程} = \begin{cases} 1. \text{基础POM配置} \\ 2. \text{打包插件配置} \\ 3. \text{构建验证} \end{cases} $$ **一、基础POM配置** ```xml <!-- 必须继承Spring Boot父POM --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.5</version> <!-- 使用最新稳定版 --> <relativePath/> <!-- 从仓库查找 --> </parent> <groupId>com.example</groupId> <artifactId>demo-app</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <!-- 明确指定打包类型 --> ``` **二、核心插件配置** ```xml <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!-- 如果已继承父POM,版本可省略 --> <configuration> <mainClass>com.example.DemoApplication</mainClass> <!-- 指定启动类 --> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> <executions> <execution> <goals> <goal>repackage</goal> <!-- 关键:重新打包为可执行JAR --> </goals> </execution> </executions> </plugin> </plugins> </build> ``` **三、打包命令执行** ```bash # 标准打包命令 mvn clean package # 生成的两个JAR文件: demo-app-1.0.0.jar # 可执行JAR含依赖) demo-app-1.0.0.jar.original # 原始JAR(不含依赖) ``` **四、高级配置选项** 1. **自定义JAR名称** ```xml <build> <finalName>${project.artifactId}-custom</finalName> </build> ``` 2. **排除特定依赖** ```xml <plugin> <configuration> <excludes> <exclude> <groupId>com.example</groupId> <artifactId>unwanted-module</artifactId> </exclude> </excludes> </configuration> </plugin> ``` 3. **分层打包(优化Docker镜像)** ```xml <plugin> <configuration> <layers> <enabled>true</enabled> </layers> </configuration> </plugin> ``` **五、验证打包结果** ```bash # 检查JAR结构 jar tf target/demo-app-1.0.0.jar # 预期含的关键目录: BOOT-INF/ |- classes/ # 项目编译文件 |- lib/ # 依赖库 META-INF/ |- MANIFEST.MF # 启动配置 ``` **六、启动验证** ```bash java -jar target/demo-app-1.0.0.jar # 成功标志: 2024-06-08T12:00:00.000Z INFO [demo-app] Starting DemoApplication v1.0.0 ``` **常见问题解决矩阵:** $$ \text{问题} \Rightarrow \text{解决方案} = \begin{cases} \text{No main manifest} \Rightarrow \text{检查spring-boot-maven-plugin配置} \\ \text{依赖缺失} \Rightarrow \text{确认maven-dependency-plugin是否正确执行} \\ \text{版本冲突} \Rightarrow \text{执行mvn dependency:tree分析} \end{cases} $$ **最佳实践建议:** 1. 始终使用`spring-boot-starter-parent`作为父POM 2. 避免修改默认的`<finalName>`配置 3. 生产环境推荐启用分层打包 4. 使用JDK 17+与Spring Boot 3.x兼容组合 通过以上配置,可以生成标准的Spring Boot可执行JAR,其文件结构符合$ \text{Fat JAR} = \text{应用代码} + \text{依赖库} + \text{嵌入式容器} $的规范要求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值