当前位置: 首页 > news >正文

【LINUX】Linux 下打包与部署 Java 程序的全流程指南

文章目录

    • 一、Java 程序打包
      • 1. 使用 Maven 打包
      • 2. 使用 Gradle 打包
    • 二、运行 JAR 文件
      • 1. 前台运行
      • 2. 后台运行
        • 方法 1:使用 `&` 符号
        • 方法 2:使用 `nohup`
    • 三、关闭运行中的程序
      • 1. 查找程序 PID
      • 2. 关闭程序
    • 四、使用 Shell 脚本管理程序
      • 1. 创建 Shell 脚本
      • 2. 使用脚本
    • 五、总结

在 Linux 系统中,完成 Java 程序的打包、运行和部署是开发人员的重要技能。本文将涵盖从 打包运行前后台管理关闭程序,到 使用 Shell 脚本管理程序的完整流程,助你高效完成任务。


一、Java 程序打包

程序开发完成后,需将代码打包为 JAR 文件以便部署。

1. 使用 Maven 打包

  1. 切换到项目根目录

    cd /path/to/your/project
    
  2. 运行 Maven 命令

    mvn clean install
    

    打包完成后,JAR 文件会出现在 target/ 目录,例如:target/myapp-1.0.jar

  3. 验证打包结果

    java -jar target/myapp-1.0.jar
    

2. 使用 Gradle 打包

  1. 运行 Gradle 命令:

    ./gradlew build
    
  2. 找到生成的 JAR 文件: 文件通常位于 build/libs/ 目录。

打包程序这里就用maven指令简单带过了,之前文章有详细讲过程序的打包方式,忘记的朋友可以看下面这篇:

SpringBoot项目:前后端打包与部署(使用 Maven)


二、运行 JAR 文件

完成打包后,可通过以下方式运行程序。

1. 前台运行

最简单的运行方式是直接执行以下命令:

java -jar myapp-1.0.jar

程序会在当前终端运行,日志输出到屏幕上。关闭终端后,程序会结束运行。

2. 后台运行

若希望程序在终端关闭后仍继续运行,可采用以下方式:

方法 1:使用 & 符号
java -jar myapp-1.0.jar &
  • 说明:程序会以后台任务运行。可以通过以下命令查看和管理任务:
    • 查看后台任务jobs
    • 将后台任务转到前台fg %11 是任务编号)。
    • 继续运行后台任务bg %1
方法 2:使用 nohup
nohup java -jar myapp-1.0.jar > app.log 2>&1 &
  • nohup:忽略终端关闭信号,确保程序持续运行。
  • > app.log:将日志保存到 app.log 文件。
  • 2>&1:将错误日志也保存到同一个文件。

三、关闭运行中的程序

1. 查找程序 PID

通过 ps 命令找到正在运行的 Java 程序:

ps -ef | grep java

输出示例:

root     10901  1  0 12:00 ?  00:00:20 java -jar myapp-1.0.jar

其中,10901 是程序的进程 ID(PID)。

2. 关闭程序

使用 kill 命令根据 PID 终止程序:

kill 10901

若无法正常关闭,可以强制终止:

kill -9 10901

四、使用 Shell 脚本管理程序

手动启动和关闭程序可能显得繁琐。为简化操作,可以使用脚本管理程序。

1. 创建 Shell 脚本

新建一个 app.sh 文件,内容如下:

#!/bin/bashAPP_NAME="myapp-1.0.jar" # JAR 文件名
LOG_FILE="app.log"       # 日志文件
PID_FILE="app.pid"       # PID 文件case "$1" instart)if [ -f "$PID_FILE" ]; thenecho "程序已运行,PID=$(cat $PID_FILE)"exit 1finohup java -jar $APP_NAME > $LOG_FILE 2>&1 &echo $! > $PID_FILEecho "程序已启动,PID=$(cat $PID_FILE)";;stop)if [ -f "$PID_FILE" ]; thenkill $(cat $PID_FILE)rm -f $PID_FILEecho "程序已停止"elseecho "未找到运行中的程序"fi;;restart)$0 stop$0 start;;status)if [ -f "$PID_FILE" ]; thenecho "程序正在运行,PID=$(cat $PID_FILE)"elseecho "程序未运行"fi;;*)echo "用法: $0 {start|stop|restart|status}"exit 1;;
esac

2. 使用脚本

  1. 赋予可执行权限:

    chmod +x app.sh
    
  2. 启动程序:

    ./app.sh start
    
  3. 停止程序:

    ./app.sh stop
    
  4. 查看状态:

    ./app.sh status
    

shell脚本详细可以看这个文章:【LINUX】Shell 脚本管理 Java 程序详解-CSDN博客


五、总结

通过本文的讲解,你已经学会如何在 Linux 下完成 Java 程序的打包、运行及管理:

  1. 打包:使用 Maven 或 Gradle 构建 JAR 文件。
  2. 运行:支持前台运行(直接运行)和后台运行(&nohup)。
  3. 关闭程序:通过 ps 查找进程并使用 kill 停止。
  4. 脚本管理:编写 Shell 脚本实现一键启动、停止、重启和状态查看。

相关文章:

【LINUX】Linux 下打包与部署 Java 程序的全流程指南

文章目录 一、Java 程序打包1. 使用 Maven 打包2. 使用 Gradle 打包 二、运行 JAR 文件1. 前台运行2. 后台运行方法 1:使用 & 符号方法 2:使用 nohup 三、关闭运行中的程序1. 查找程序 PID2. 关闭程序 四、使用 Shell 脚本管理程序1. 创建 Shell 脚本…...

Spark 计算总销量

Spark 计算总销量 题目: 某电商平台存储了所有商品的销售数据,平台希望能够找到销量最好的前 N 个商品。通过分析销售记录,帮助平台决策哪些商品需要更多的推广资源。 假设你得到了一个商品销售记录的文本文件 product_id, product_name,…...

矩阵置零

矩阵置零 ​ 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2&#xff…...

Ai编程cursor + sealos + devBox实现登录以及用户管理增删改查(十三)

一、什么是 Sealos? Sealos 是一款以 Kubernetes 为内核的云操作系统发行版。它以云原生的方式,抛弃了传统的云计算架构,转向以 Kubernetes 为云内核的新架构,使企业能够像使用个人电脑一样简单地使用云。 二、适用场景 业务运…...

深度解读:生产环境中的日志优化与大数据处理实践20241116

🌟 深度解读:生产环境中的日志优化与大数据处理实践 在现代软件开发中,日志是系统调试与问题排查的重要工具。然而,随着应用的复杂化和数据量的增长,传统日志模块在应对复杂嵌套对象、大数据类型时可能面临性能问题和安…...

docker 搭建gitlab,亲测可用

1、Gitlab镜像 查找Gitlab镜像 docker search gitlab 拉取Gitlab镜像 docker pull gitlab/gitlab-ce:latest 2、启动Gitlab容器 # 启动容器 docker run \-itd \-p 9980:80 \-p 9922:22 \-v /home/gitlab/etc:/etc/gitlab \-v /home/gitlab/log:/var/log/gitlab \-v /ho…...

SpringBoot 分层解耦

从没有分层思想到传统 Web 分层,再到 Spring Boot 分层架构 1. 没有分层思想 在最初的项目开发中,很多开发者并没有明确的分层思想,所有逻辑都堆砌在一个类或一个方法中。这样的开发方式通常会导致以下问题: 代码混乱&#xff1…...

opencv复习

目录 1.core 1.图像变换 1.1 affine仿射变换 1.2 透视变换 2.四元数(旋转) 2.1 轴角转四元数 2.2 旋转矩阵转四元数 2.3 欧拉角转旋转矩阵 2.4 四元数转旋转矩阵 2.5 四元数用eigen用的比较多 2. imgproc. Image Processing 2.1 bilateralF…...

flask-socketio相关总结

flask-socketio是一个为flask应用程序添加的实时双向通信功能的扩展库,有了这个库,就可以在flask应用中应用websocket协议,帮助flask实现低延迟、双向的客户端、服务端通信。客户端通过任何SocketIO官方库,都能与服务器建立长连接…...

2024-12-03OpenCV图片处理基础

OpenCV图片处理基础 OpenCV的视频教学:https://www.bilibili.com/video/BV14P411D7MH 1-OpenCV摄像头读取 OpenCV使用摄像头读取图片帧,点击S保存当前帧到指定文件夹,点击Q关闭窗口,点击其他按钮打印按钮的值 要实现这个功能&…...

本地部署开源趣味艺术画板Paint Board结合内网穿透跨网络多设备在线绘画

文章目录 前言1.关于Paint Board2.本地部署paint-board3.使用Paint Board4.cpolar内网穿透工具安装5.创建远程连接公网地址6.固定Paint Board公网地址 前言 大家好,是不是每次想要在电脑上画画时,都被那些笨重的专业绘图软件搞得头大如斗呢?…...

iOS、android的app备案超简单的公钥、md5获取方法

很多云商的备案平台,推荐下载一些工具来获取公钥和MD5,但是这些工具的跨平台性不是很好,安装也十分麻烦,安装的时候还需要设置国内源等等。 这里,其实有在线工具可以获取APP的公钥和MD5、SHA1值这些信息的。不需要安装…...

SpringCloud 与 SpringBoot版本对应关系,以及maven,jdk

目录 SpringCloud 与 SpringBoot各版本的对应关系 方式一 Learn 方式二 OverView SpringBoot与JDK、maven 容器等对应关系 SpringCloud 与 SpringBoot各版本的对应关系 SpringCloudSpringBootFinchley2.0.xFinchley.SR1Spring Boot >=2.0.3.RELEASE and <=2.0.9RELEAS…...

23种设计模式之装饰模式

目录 1. 简介2. 代码2.1 ABatterCake &#xff08;抽象组件&#xff09;2.2 BatterCake &#xff08;具体组件&#xff09;2.3 ADecorator &#xff08;抽象装饰者&#xff09;2.4 EggDecorator &#xff08;具体装饰者&#xff09;2.5 SausageDecorator&#xff08;具体装饰者…...

HTMLHTML5革命:构建现代网页的终极指南 - 2. HTMLHTML5H5的区别

HTML&HTML5革命&#xff1a;构建现代网页的终极指南 2. HTML&HTML5&H5的区别 大家好&#xff0c;我是莫离老师 在上一节课&#xff0c;我们了解了HTML的重要性和前端开发的核心概念。 今天&#xff0c;我们将深入探讨 HTML、HTML5 和 H5 的区别&#xff0c;并重点…...

Django之ORM表操作

ORM表操作 1.ORM单表操作 首先想操作表的增删改查&#xff0c;需要先导入这个表,以之前创建的UserInfo表为例,在app下的views.py中导入 from app import modelsdef query(request):new_obj models.UserInfo(id1,name北北,bday2019-09-27,checked1,)new_obj.save()return Htt…...

python下几个淘宝、天猫、京东爬虫实例

以下是使用Python编写的针对淘宝、天猫、京东详情页的爬虫实例。请注意&#xff0c;这些实例仅供参考&#xff0c;实际使用时可能需要根据网站结构的变化进行调整&#xff0c;并且需要遵守各平台的爬虫协议和法律法规。 淘宝详情页爬虫实例 环境准备&#xff1a; Python 3.xSe…...

级联树结构TreeSelect和上级反查

接口返回结构 前端展示格式 前端组件 <template><div ><el-scrollbar height"70vh"><el-tree :data"deptOptions" :props"{ label: label, children: children }" :expand-on-click-node"false":filter-node-me…...

gradle下载慢解决方案2024 /12 /1android studio (Windows环境)

gradle下载慢解决方案2024 /12 /1 默认环境配置好了,环境配置和程序安装请出门右转 打开软件,点击右上角设置,找到如下设置页 选择本地安装并制定好你已经安装好的 gradle 应用保存即可 全局插件环境配置(新版本可以直接在设置中添加了) 找对应位置添加国内源并把前面的内置源…...

Python+OpenCV系列:GRAY BGR HSV

以下是 GRAY、BGR 和 HSV 三种色彩空间的对比&#xff0c;涵盖了它们的定义、特点、应用场景和优缺点&#xff1a; 1. 定义 GRAY&#xff1a; 灰度图像仅包含亮度信息&#xff0c;每个像素用一个值&#xff08;通常在0到255之间&#xff09;表示亮度&#xff08;黑到白&#x…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...