后端程序打成 JAR 包的详细步骤及解释

embedded/2025/1/18 18:38:00/

在后端开发中,将程序打成 JAR 包是一个常见的操作,它可以方便程序的部署和分发。本文将详细介绍几种将后端程序打成 JAR 包的方法及其相应的解释,帮助你更好地完成项目的打包工作。

一、使用 Maven 构建工具(适用于 Maven 项目)

  1. 确保 pom.xml 文件存在
    首先,要使用 Maven 进行项目打包,确保你的项目根目录下有一个 pom.xml 文件。这个文件是 Maven 项目的核心配置文件,它包含了项目的各种信息和配置,包括依赖、插件、构建信息等。

  2. 添加 spring-boot-maven-plugin 插件配置
    在 pom.xml 文件中添加以下插件配置,这里以 spring-boot 项目为例:

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.5.4</version> <!-- 这里使用的是 Spring Boot 2.5.4 版本,你可以根据实际情况调整 --><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins>
</build>

解释:

  • groupId 和 artifactId:它们共同定义了我们所使用的插件,在这里使用的是 spring-boot-maven-plugin,用于实现 Spring Boot 项目的打包等操作。
  • version:该插件的版本号,根据你的 Spring Boot 版本和实际需求,可以进行相应的调整。
  • repackage 目标:当执行 mvn package 命令时,这个目标会将生成的 jar 包重新打包,使其可以直接运行,方便部署和使用。
  1. 执行打包命令
    打开命令行终端,导航到项目的根目录,然后执行以下命令:
mvn clean package

解释:

  • mvn clean:该命令会清除之前构建的文件和目录,这一步很重要,可以确保每次构建都是从一个全新的状态开始,避免因旧文件和目录残留导致的问题。
  • package:这个命令会将项目进行编译、测试,并将其打包成一个 jar 文件。
  • 最终生成的 jar 文件一般位于 target 目录下,文件名通常是 your-project-name-version.jar 的形式,其中 your-project-name 是你的项目名称,version 是项目的版本号。

二、使用 Gradle 构建工具(适用于 Gradle 项目)

  1. 确保 build.gradle 文件存在
    确保你的项目根目录下有一个 build.gradle 文件,它是 Gradle 项目的核心配置文件,类似于 Maven 的 pom.xml,包含了项目的各种配置信息。

  2. 添加 Gradle 配置
    在 build.gradle 中添加以下配置,以 spring-boot 项目为例:

plugins {id 'org.springframework.boot' version '2.5.4' // 这里使用的是 Spring Boot 2.5.4 版本,你可以根据实际情况调整
}jar {enabled = true
}bootJar {enabled = true
}

解释:

  • plugins:这里添加了 org.springframework.boot 插件,其版本号可以根据实际情况调整。添加该插件是为了使用 Spring Boot 相关的打包功能,使项目可以方便地打包成可运行的 jar 文件。
  • jar 和 bootJar 块中的 enabled = true:确保在执行 gradle build 命令时会生成 jar 文件,jar 块主要针对普通的 jar 包,而 bootJar 块则针对 Spring Boot 项目的可运行 jar 包。
  1. 执行打包命令
    打开命令行终端,导航到项目的根目录,然后执行以下命令:
gradle clean build

解释:

  • gradle clean:该命令会清除之前构建的文件和目录,保证构建的清洁性。
  • build:将项目进行编译、测试,并将其打包成一个 jar 文件。
  • 最终生成的 jar 文件通常位于 build/libs 目录下,文件名一般为 your-project-name-version.jar 的形式。

三、使用 Java 的 jar 命令(不依赖构建工具)

  1. 确保项目已编译成功
    在使用 jar 命令之前,首先要确保你的项目已经成功编译,并且生成了相应的 .class 文件,这些 .class 文件通常位于 bin 或 out 目录下,具体位置取决于你的开发环境和配置。

  2. 执行 jar 命令进行打包
    打开命令行终端,导航到包含 .class 文件的目录,然后执行以下命令:

jar cvf your-jar-file-name.jar *

解释:

  • jar cvf:这是 jar 命令的创建选项,其中:
    • c:表示创建一个新的 jar 文件。
    • v:表示在标准输出中显示详细信息,这样你可以看到打包的详细过程,便于排查问题或了解打包的进度。
    • f:用于指定生成的 jar 文件的名称。
  • your-jar-file-name.jar:你可以根据自己的需求为生成的 jar 文件命名。
  • *:表示将当前目录下的所有文件和目录都添加到 jar 文件中。

注意事项:
这种方法对于简单的项目可能比较方便,但对于复杂的项目,尤其是包含多个依赖的项目,管理起来会比较麻烦。因为使用 jar 命令不会自动处理依赖关系,你需要手动管理依赖。

四、其他重要注意事项

  • 依赖管理(使用 Maven 或 Gradle)
    对于包含依赖的项目,使用 Maven 或 Gradle 会带来很大的便利,它们会自动处理依赖关系,将依赖的库包含在生成的 jar 文件中。对于 Spring Boot 项目,它们会生成一个包含依赖的 fat jar,使得项目在运行时可以直接使用,无需额外配置依赖项。

  • 手动管理依赖(使用 jar 命令)
    如果使用 jar 命令,你可能需要手动管理依赖。一种常见的方式是将依赖的 jar 文件添加到 classpath 中,或者使用 Manifest 文件指定 Main-Class 和 Class-Path。以下是一个示例 Manifest 文件:

Manifest-Version: 1.0
Main-Class: com.yourpackage.YourMainClass
Class-Path: lib/dependency1.jar lib/dependency2.jar

解释:

  • Manifest-Version:这是 Manifest 文件的版本,通常为 1.0
  • Main-Class:这是程序的入口类,需要使用完整的包名和类名,告诉 Java 虚拟机从哪个类开始执行程序。
  • Class-Path:列出了依赖的 jar 文件,这些文件需要放置在 lib 目录下,确保程序在运行时可以找到所需的依赖。

综上所述,我们介绍了将后端程序打成 JAR 包的几种常见方法,你可以根据自己的项目情况和使用的构建工具来选择合适的方式进行操作。无论选择哪种方法,都要确保在打包前项目能够正确编译和运行,这样可以避免在打包过程中出现潜在的问题,保证项目的顺利部署和运行。希望本文能帮助你更好地完成后端程序的打包工作,如果你在操作过程中遇到任何问题,欢迎在评论区留言交流。

以上就是本文的全部内容啦,感谢阅读,祝大家开发顺利!


http://www.ppmy.cn/embedded/155014.html

相关文章

计算机网络常见协议

目录 OSPF(Open Shortest Path First) NAT(Network Address Translation) ICMP (Internet Control Message Protocol) HTTPS&#xff08;SSL/TLS加密&#xff09; HTTPS协议 1. 对称加密 2. 非对称加密 3. 证书验证 4. 回顾https协议传输流程 HTTP TCP UDP 1. TCP&a…

01、kafka知识点综合

kafka是一个优秀大吞吐消息队列&#xff0c;下面我就从实用的角度来讲讲kafka中&#xff0c;“kafka为何有大吞吐的机制”&#xff0c;“数据不丢失问题”&#xff0c;“精准一次消费问题” 01、kafka的架构组织和运行原理 kafka集群各个节点的名称叫broker&#xff0c;因为kaf…

算法面试准备 - 手撕系列第七期 - MLP(利用FashionMNIST数据集)

算法面试准备 - 手撕系列第七期 - MLP(利用FashionMNIST数据集) 目录 算法面试准备 - 手撕系列第七期 - MLP(利用FashionMNIST数据集)FashionMINIST 图像分类原理解析1. 全连接的原理图2. 背景介绍3.引入相关库函数4. 数据预处理5. 模型设计6. 初始化网络&#xff0c;损失函数与…

app版本控制java后端接口版本管理

java api version 版本控制 java接口版本管理 1 自定义 AppVersionHandleMapping 自定义AppVersionHandleMapping实现RequestMappingHandlerMapping里面的方法 public class AppVersionHandleMapping extends RequestMappingHandlerMapping {Overrideprotected RequestCondit…

学习threejs,使用RollControls相机控制器

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.RollControls 相机控…

STM32程序发生异常崩溃时,怎样从串口输出当时的程序调用栈等信息

当STM32程序发生异常崩溃时&#xff0c;为了从串口输出当时的程序调用栈信息&#xff0c;并使用Keil等工具确定具体的函数信息&#xff0c;你可以按照以下步骤操作&#xff1a; 启用调试信息输出&#xff1a; 在STM32程序中&#xff0c;你需要先确保启用了调试信息的输出。这通…

【网络】DNS解析流程

DNS全称叫做域名系统。 DNS域名主要是通过 . 来进行分割层级的&#xff0c;越往后层级级别越大&#xff08;符合外国人起的名称&#xff09; 我们访问的url如&#xff1a;www.baidu.com其实在最后还有一个 . ->www.baidu.com. 最后一个点代表根域名 . 根域 在最顶层&…

html中鼠标位置信息

pageX&#xff1a;鼠标距离页面的最左边的距离&#xff0c;包括滚动条的长度。clientX&#xff1a;鼠标距离浏览器视口的左距离&#xff0c;不包括滚动条。offsetX&#xff1a;鼠标到事件源左边的距离。movementX&#xff1a;鼠标这次触发的事件的位置相对于上一次触发事件的位…