Java工程如何在Linux环境下运行?

在Linux环境下运行Java工程是后端开发中的常见需求,整个过程涉及环境配置、项目编译、依赖管理、程序运行及后台服务管理等多个环节,以下是详细的操作步骤和注意事项,帮助顺利完成Java工程的部署与运行。

java工程如何在linux下运行

环境准备:安装与配置JDK

Java工程的运行依赖于Java Development Kit(JDK),需先确保Linux系统已安装正确版本的JDK,以下是几种常见的安装方式:

使用包管理器安装(推荐新手)

以Ubuntu/Debian系统为例,使用apt命令安装OpenJDK(以JDK 11为例):

sudo apt update
sudo apt install openjdk-11-jdk

安装后验证是否成功:

java -version  # 查看Java版本
javac -version # 查看编译器版本

手动安装JDK(适用于特定版本)

若需安装Oracle JDK或其他未收录在包管理器中的版本,可手动下载安装:
(1)从Oracle官网或Adoptium下载JDK的tar.gz包(如OpenJDK 11的jdk-11.0.13_linux-x64_bin.tar.gz);
(2)将安装包上传至Linux系统(可通过scpwget下载),解压到指定目录(如/usr/local/):

sudo tar -zxvf jdk-11.0.13_linux-x64_bin.tar.gz -C /usr/local/

(3)配置环境变量,编辑/etc/profile或用户家目录下的~/.bashrc文件,添加以下内容:

export JAVA_HOME=/usr/local/jdk-11.0.13
export PATH=$JAVA_HOME/bin:$PATH

(4)使配置生效:

source /etc/profile  # 或 source ~/.bashrc

JDK安装方式对比

安装方式 优点 缺点 适用场景
包管理器安装 简单快速,自动依赖管理 版本可能较旧 开发测试环境,无特殊版本需求
手动安装 可灵活选择版本,适合生产环境 需手动配置环境变量,依赖需自行处理 需要特定JDK版本的生产环境

项目编译与依赖管理

Java工程通常使用构建工具(如Maven或Gradle)管理依赖和编译代码,需先安装对应工具并执行构建。

使用Maven构建

(1)安装Maven(以Ubuntu为例):

sudo apt install maven

(2)进入项目根目录(包含pom.xml文件),执行编译命令:

mvn clean compile  # 编译源代码,生成target目录
mvn package       # 打包为jar包(默认生成jar文件于target/目录下)

若项目包含依赖,Maven会自动下载并管理,无需手动处理jar包路径。

使用Gradle构建

(1)安装Gradle(需先安装JDK,下载二进制包并配置环境变量):

# 下载Gradle(如gradle-7.2-bin.zip),解压到/usr/local/
sudo unzip gradle-7.2-bin.zip -d /usr/local/
# 配置环境变量(~/.bashrc)
export GRADLE_HOME=/usr/local/gradle-7.2
export PATH=$GRADLE_HOME/bin:$PATH
source ~/.bashrc

(2)进入项目根目录(包含build.gradle文件),执行构建:

gradle build  # 编译并打包,生成jar包于build/libs/目录下

普通Java项目(无构建工具)

若项目未使用Maven/Gradle,需手动编译并处理依赖:
(1)编译源代码(假设源码在src/目录,输出到classes/):

mkdir -p classes
javac -d classes src/*.java

(2)运行时需手动指定依赖jar包路径(通过-cp参数):

java -cp "classes:lib/*.jar" com.example.MainClass  # Linux下用冒号分隔路径

运行Java程序

编译完成后,可通过java命令运行程序,根据项目类型选择不同的运行方式。

运行普通jar包

若项目已打包为可执行jar包(包含Main-Class清单),直接运行:

java -jar target/your-app.jar

若jar包未包含依赖(如Maven的jar打包类型),需通过-cp指定依赖路径:

java -cp "target/your-app.jar:lib/*" com.example.MainClass

运行Spring Boot等fat jar

Spring Boot项目通常打包为“fat jar”(包含所有依赖),可直接运行:

java -jar target/spring-boot-app.jar --server.port=8081  # 可附带启动参数

后台运行与日志管理

直接运行java -jar命令时,终端关闭会导致程序终止,需使用后台运行工具:

  • nohup:让程序忽略挂断信号,输出日志到文件
    nohup java -jar your-app.jar > app.log 2>&1 &  # 后台运行,日志输出到app.log
  • screen:创建会话,可断开连接后重新 attach
    screen -S java_app  # 创建新会话
    java -jar your-app.jar  # 在会话中运行程序
    # 按Ctrl+A+D暂时断开会话,后续通过screen -r java_app恢复

后台服务管理(systemd)

生产环境中,通常将Java程序注册为systemd服务,实现开机自启、日志管理、进程监控等功能。

创建服务文件

编辑/etc/systemd/system/java-app.service如下:

[Unit]
Description=Java Application Service
After=network.target
[Service]
User=javauser  # 运行服务的用户(需提前创建)
WorkingDirectory=/path/to/your/app
ExecStart=/usr/bin/java -jar your-app.jar --spring.profiles.active=prod
ExecStop=/bin/kill -15 $MAINPID
SuccessExitStatus=143
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target

启动并管理服务

systemctl daemon-reload  # 重新加载服务配置
systemctl start java-app  # 启动服务
systemctl enable java-app # 开机自启
systemctl status java-app # 查看服务状态
journalctl -u java-app -f # 查看实时日志

常见问题排查

  1. java: command not found:检查JDK是否安装成功,JAVA_HOMEPATH是否正确配置。
  2. Error: Could not find or load main class
    • 检查-cp路径是否正确(Linux下用冒号分隔);
    • 确认包名与类名是否匹配(如com.example.MainClass);
    • 若为jar包,检查META-INF/MANIFEST.MF中的Main-Class是否配置正确。
  3. 内存溢出(OutOfMemoryError:调整JVM参数,如java -Xms512m -Xmx2048m -jar your-app.jar(初始堆512m,最大堆2g)。

相关问答FAQs

Q1: 如何让Java程序在Linux开机时自动启动?
A1: 可通过两种方式实现:
(1)使用nohup结合&后台运行,并添加到/etc/rc.local文件(需赋予执行权限chmod +x /etc/rc.local);
(2)推荐使用systemd服务(如上文所述),通过systemctl enable设置开机自启,更适合生产环境,支持依赖管理和进程监控。

Q2: 运行jar包时提示“no main manifest attribute”,如何解决?
A2: 该错误通常表示jar包未正确配置Main-Class入口点,解决方法:
(1)若使用Maven,检查pom.xml中是否添加maven-jar-plugin并配置Main-Class

   <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-jar-plugin</artifactId>
       <version>3.2.0</version>
       <configuration>
           <archive>
               <manifest>
                   <mainClass>com.example.MainClass</mainClass>
               </manifest>
           </archive>
       </configuration>
   </plugin>

(2)若为手动打包,可通过jar cvfe your.jar com.example.MainClass *.class命令创建包含主类的jar包;
(3)若依赖未包含,可使用java -cp "your.jar:lib/*" com.example.MainClass直接指定主类运行。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/20987.html

(0)
酷番叔酷番叔
上一篇 5小时前
下一篇 5小时前

相关推荐

  • 为什么你总是感到疲惫?

    Shell脚本中注释多行方法1:使用 << 和自定义标记(推荐)在脚本开头插入:<<'COMMENT'这是被注释的多行内容echo "这行不会执行"ls /nonexistent # 不会报错COMMENT原理:<<‘COMMENT’ 定义……

    2025年6月22日
    2800
  • Linux Mint如何换源?详细步骤教程指南

    Linux Mint 作为一款基于 Ubuntu 的优秀发行版,以其稳定易用受到许多用户喜爱,但在使用过程中,国内用户访问官方源时常常会遇到下载速度慢、连接超时等问题,影响系统更新和软件安装的效率,更换为国内镜像源是解决这一问题的有效方法,本文将详细介绍 Linux Mint 换源的步骤、注意事项及常见问题处理……

    20小时前
    400
  • Linux下C程序如何运行?

    环境准备:安装GCC编译器GCC(GNU Compiler Collection)是Linux下标准的C编译器,安装命令(根据发行版选择):Ubuntu/Debian:sudo apt update && sudo apt install build-essentialCentOS/RHEL:s……

    2025年7月30日
    1400
  • Linux系统中如何下载文件?命令行工具怎么操作?

    在Linux系统中,下载文件是日常操作中非常常见的需求,无论是通过命令行工具还是图形界面,Linux都提供了多种高效的方式,本文将详细介绍几种主流的下载方法,涵盖不同场景下的使用技巧,命令行工具:高效灵活的下载方式命令行工具是Linux环境下下载文件的首选,尤其适合服务器管理或远程操作场景,以下是几种常用的命令……

    2025年8月22日
    700
  • 为什么加班越多效率越低?

    如何将本地文件上传到 Linux 服务器(详细指南)在日常开发、运维或数据管理中,将本地文件上传到 Linux 服务器是高频操作,本文提供 4 种主流方法,涵盖命令工具与图形界面,兼顾安全性与效率,适合不同技术背景的用户,SCP 命令(安全复制)适用场景:快速传输单个文件或小批量文件,基于 SSH 加密,操作步……

    2025年7月16日
    2500

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信