Springboot项目按自定义的jar包方式打包

本文介绍了一种使用Maven进行项目打包的优化方案,通过将依赖的jar包分离出来,显著减小了最终部署的jar包体积,便于项目的更新与部署。

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

不多说了,直接贴上代码,大家先看看,后续有时间再逐一说明各项含义:

这种打包形式,可以将jar包放到工程的lib目录下,.sh的启动文件可以拷贝到打包的target下的根目录下,这样每次更新项目的时候,上传的jar包就会小至了1/10,方便部署。

<build>
        <plugins>
            <!--<plugin>-->
                <!--<groupId>org.springframework.boot</groupId>-->
                <!--<artifactId>spring-boot-maven-plugin</artifactId>-->
            <!--</plugin>-->
            <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>
                    <!--<compilerArguments>-->
                        <!--<extdirs>${project.basedir}/lib</extdirs>-->
                    <!--</compilerArguments>-->
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>
                                ${project.build.directory}/lib/
                            </outputDirectory>
                            <excludeTransitive>false</excludeTransitive>
                            <stripVersion>false</stripVersion>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- 项目资源插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <encoding>UTF-8</encoding>
                            <!-- 拷贝项目src/main/resources/下,除.bat以外的所有文件到conf/目录下 -->
                            <outputDirectory>${project.build.directory}/config</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>src/main/resources/</directory>
                                    <filtering>true</filtering>
                                    <excludes>
                                        <exclude>*.sh</exclude>
                                    </excludes>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                    <execution>
                        <id>copy-command</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <encoding>UTF-8</encoding>
                            <!-- 只拷贝项目src/main/resources/目录下的.bat文件到输出目录下 -->
                            <outputDirectory>${project.build.directory}</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>src/main/resources/</directory>
                                    <filtering>true</filtering>
                                    <includes>
                                        <include>*.sh</include>
                                    </includes>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>
                                com.zaitong.web.CKJApplication
                            </mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>

<think>我们正在处理用户的问题:"我想将SpringBoot项目构建为可执行的JAR文件请问howto packagea SpringBoot projectinto anexecutable jar"根据系统指令,我们需要:1.使用中文回答2.行内数学表达式用$...$,独立公式用$$...$$3.生成相关问题4.回答结构清晰,逐步解决问题5.引用标识:在引用的段落末尾自然地添加引用标识注意:用户提供的引用内容是关于Spring Boot的,但用户的问题是关于打包可执行JAR的,所以我们需要从这些引用中提取相关信息。分析引用内容:引用[1]提到可以通过Spring Initializr创建项目,并下载Maven构建文件或zip项目。引用[2]提到SpringBoot提供了作为Web存档部署在外部容器中的选项,但这里我们关注可执行JAR。引用[3]列出了常用的starter依赖,这些依赖在构建JAR时会被含。引用[4]提到了配置文件编码问题,虽然与打包不直接相关,但说明配置文件的处理。然而,用户的问题是如何打包为可执行JAR。实际上,SpringBoot默认就是打包为可执行JAR的,使用Maven或Gradle构建。因此,回答步骤:1.说明使用Maven构建(因为引用中提到了Maven2.说明使用Gradle构建(可选,因为用户没有指定构建工具)3.解释Maven的配置(因为引用[1]提到了Maven buildfile)具体步骤:-使用Maven时,在pom.xml中设置打包方式jar,并添加SpringBoot Maven插件。 -然后运行Maven命令进行打包。同时,根据引用[3],我们可能需要添加相应的starter依赖。另外,引用[1]提到了SpringInitializr,我们可以建议用户如果还没有项目,可以通过Initializr生成。由于用户已经有一个SpringBoot项目,我们假设他需要的是打包步骤。回答结构:1.介绍SpringBoot默认支持可执行JAR2.使用Maven打包的步骤3.使用Gradle打包的步骤(简要)4.运行JAR文件的方法5.注意事项(如引用[4]提到的配置文件问题,虽然不直接相关,但可以提一下配置文件的位置)生成相关问题:1.如何自定义Spring Boot可执行JAR的启动?2.如何将SpringBoot应用打包为WAR文件?3.如何配置SpringBoot应用的启动参数?注意:引用标识的使用,我们在回答中如果引用了给定的引用内容,就在句子末尾加上[^n]。但是,我们的回答主要基于通用知识,不过我们可以尝试将引用内容融入:例如:引用[1]提到可以通过Spring Initializr创建项目,那么我们可以说:如果你还没有创建项目,可以使用SpringInitializr生成一个基础项目[^1]。但是,用户的问题是打包,所以重点在构建。我们可以在介绍Initializr时引用[^1],在提到starter依赖时引用[^3],在提到配置文件时引用[^4]。具体回答:</think>### 如何将 Spring Boot 项目打包为可执行 JAR 文件 Spring Boot 默认支持将项目打包为可执行 JAR含嵌入式服务器),以下是详细步骤: #### 一、Maven 项目打包步骤 1. **确认打包配置** 在 `pom.xml` 中确保: ```xml <packaging>jar</packaging> <!-- 默认即为 jar --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!-- 核心插件 --> </plugin> </plugins> </build> ``` 此插件会生成含依赖的可执行 JAR[^3]。 2. **执行打包命令** 在项目根目录运行: ```bash mvn clean package ``` 生成的 JAR 位于 `target/` 目录,命名格式为 `{项目名}-{版本}.jar`。 3. **运行 JAR 文件** ```bash java -jar target/your-project-0.0.1-SNAPSHOT.jar ``` #### 二、Gradle 项目打包步骤 1. **确认插件配置** 在 `build.gradle` 中启用插件: ```groovy plugins { id 'org.springframework.boot' version '3.x.x' id 'io.spring.dependency-management' version '1.x.x' id 'java' } jar { enabled = true // 启用JAR打包 } ``` 2. **执行打包命令** ```bash ./gradlew bootJar ``` 生成的 JAR 位于 `build/libs/` 目录。 #### 三、关键注意事项 1. **配置文件处理** - `application.properties` 或 `application.yml` 会自动打包JAR[^4] - 外部配置文件可通过 `--spring.config.location` 参数指定: ```bash java -jar app.jar --spring.config.location=file:/path/to/config/ ``` 2. **依赖管理** 确保使用 Spring Boot starter 依赖(如 `spring-boot-starter-web`)以自动处理依赖冲突[^3]。 3. **验证 JAR 结构** 可执行 JAR含: - `BOOT-INF/classes`:项目编译文件 - `BOOT-INF/lib`:所有依赖库 - `META-INF/MANIFEST.MF`:指定 `Main-Class` 为 `org.springframework.boot.loader.JarLauncher` > **提示**:若需自定义 JAR 内容,可通过 `<executable>true</executable>` 配置生成完全可执行脚本(支持 Linux Systemd)[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值