Linux下Java与Spring环境配置详解
golang学习网今天将给大家带来《Linux下Java与Spring环境配置教程》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习文章或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!
答案:配置Linux上Java和Spring环境需安装JDK、设置JAVA_HOME和PATH变量、安装Maven或Gradle;推荐使用OpenJDK因开源免费且系统集成度高;注意环境变量作用域、路径正确性及版本冲突;通过Spring Initializr创建项目,用Maven或Gradle构建为可执行JAR,再以java -jar运行,并处理端口、防火墙、权限等问题。
在Linux系统上配置Java和Spring环境,核心在于三步:首先是安装Java开发工具包(JDK),它是运行Java应用程序和编译代码的基础;其次是正确配置Java相关的环境变量,让系统能找到JDK;最后,通常我们会安装一个构建工具如Maven或Gradle,它们是管理Spring项目依赖和构建流程的关键。这个过程并不复杂,但有些细节,如果没留意,可能会让你多走不少弯路。
解决方案
配置Java和Spring环境,我们通常会从JDK的安装开始,然后是构建工具,最后是验证。
1. 安装Java开发工具包 (JDK)
在Linux上,OpenJDK是首选,因为它通常是开源且易于通过包管理器安装。
使用包管理器安装 (推荐)
- Debian/Ubuntu系 (apt):
sudo apt update sudo apt install openjdk-17-jdk # 安装OpenJDK 17,你可以根据需要选择其他版本
- CentOS/Fedora系 (yum/dnf):
sudo dnf install java-17-openjdk-devel # Fedora # 或者对于较旧的CentOS/RHEL sudo yum install java-17-openjdk-devel
安装完成后,可以通过
java -version
和javac -version
来验证。
- Debian/Ubuntu系 (apt):
手动安装 (如果需要特定版本或发行版) 从Oracle官网或Adoptium (推荐) 下载JDK的Linux
tar.gz
包。# 假设下载到 ~/Downloads/jdk-17.0.x_linux-x64_bin.tar.gz sudo mkdir -p /usr/local/java sudo tar -xzf ~/Downloads/jdk-17.0.x_linux-x64_bin.tar.gz -C /usr/local/java # 重命名目录以便管理 sudo mv /usr/local/java/jdk-17.0.x /usr/local/java/jdk-17
2. 配置环境变量
无论哪种安装方式,都需要设置 JAVA_HOME
和更新 PATH
变量。
- 编辑用户配置文件:
打开
~/.bashrc
或~/.profile
(根据你的Shell和需求,~/.bashrc
更常见于交互式Shell)。nano ~/.bashrc
在文件末尾添加以下行:
# Java Environment Variables export JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64" # 根据实际安装路径调整 # 如果是手动安装,路径可能是 /usr/local/java/jdk-17 export PATH="$JAVA_HOME/bin:$PATH"
保存并退出。然后执行
source ~/.bashrc
使更改生效。 验证:echo $JAVA_HOME
和java -version
。
3. 安装构建工具 (Maven 或 Gradle)
Spring项目几乎都依赖Maven或Gradle进行构建和依赖管理。
安装Maven:
- 使用包管理器:
sudo apt install maven # Debian/Ubuntu sudo dnf install maven # Fedora/CentOS
- 手动安装:
从Maven官网下载
tar.gz
包,解压到/opt
或/usr/local
。sudo tar -xzf ~/Downloads/apache-maven-3.x.x-bin.tar.gz -C /opt/ sudo ln -s /opt/apache-maven-3.x.x /opt/maven # 创建软链接方便管理
同样需要配置环境变量,在
~/.bashrc
中添加:export M2_HOME="/opt/maven" export PATH="$M2_HOME/bin:$PATH"
source ~/.bashrc
后,通过mvn -version
验证。
- 使用包管理器:
安装Gradle (类似Maven):
- 使用包管理器:
sudo apt install gradle # Debian/Ubuntu sudo dnf install gradle # Fedora/CentOS
- 手动安装:
从Gradle官网下载
zip
包,解压到/opt
或/usr/local
。sudo unzip ~/Downloads/gradle-x.x.zip -d /opt/ sudo ln -s /opt/gradle-x.x /opt/gradle
在
~/.bashrc
中添加:export GRADLE_HOME="/opt/gradle" export PATH="$GRADLE_HOME/bin:$PATH"
source ~/.bashrc
后,通过gradle -v
验证。
- 使用包管理器:
至此,你的Linux系统已经具备了运行和开发Spring应用的基础环境。
为什么选择OpenJDK而不是Oracle JDK?
这其实是个很实际的问题,尤其是在生产环境和持续集成/部署的场景下。简单来说,OpenJDK在Linux上的优势非常明显:
首先,许可协议的自由度。Oracle在Java 8之后对Oracle JDK的商业使用许可进行了调整,虽然个人开发和测试仍然免费,但在企业级应用中,如果需要长期支持和更新,可能就需要付费了。而OpenJDK,顾名思义,是完全开源的,基于GPLv2+CE许可,这意味着你可以在任何场景下自由使用、分发和修改,没有额外的许可成本和合规性担忧。
其次,Linux发行版的原生支持。几乎所有主流的Linux发行版,无论是Ubuntu、CentOS、Fedora还是Arch Linux,它们的官方软件仓库中都包含了OpenJDK。这意味着你可以直接通过 apt
、yum
或 dnf
等包管理器轻松安装、更新和管理OpenJDK,享受系统级的安全更新和依赖管理。这比手动下载Oracle JDK的 .tar.gz
包然后解压、配置环境变量要省心得多,也更符合Linux的生态习惯。
再者,性能和功能上的趋同。过去,Oracle JDK在性能和一些高级特性上可能略有优势,但随着OpenJDK社区的蓬勃发展,特别是像Adoptium(前身为AdoptOpenJDK)这样的项目,它们提供的OpenJDK发行版在性能、稳定性、功能集上已经与Oracle JDK基本持平,甚至在某些方面做得更好。许多大型企业和云服务提供商也都在使用和贡献OpenJDK,这进一步证明了其可靠性。
所以,对于绝大多数在Linux上进行Java和Spring开发的场景,OpenJDK都是更明智、更便捷、风险更小的选择。我个人在Linux服务器上部署应用时,几乎总是选择OpenJDK。
配置环境变量时,我应该注意哪些常见的“坑”?
配置环境变量听起来简单,但确实有些地方稍不留神就会踩坑。我根据自己和同事们的经验,总结了几个最常见的“陷阱”:
一个大坑是环境变量的“作用域”问题。你可能会在 /etc/profile
、/etc/environment
、~/.bashrc
、~/.profile
甚至 /etc/bash.bashrc
等多个地方看到环境变量的配置。
~/.bashrc
:这是针对当前用户的Bash Shell配置,每次打开新的终端会话时加载。如果你只希望当前用户使用特定的JDK,这是个好地方。但如果通过SSH执行非交互式脚本,可能就不会加载。~/.profile
:这个文件在用户登录时加载,通常会调用~/.bashrc
。对于图形界面登录的用户,它可能更早生效。/etc/profile
:这是系统级的配置,所有用户登录时都会加载。如果你希望所有用户都能访问同一个JDK,可以考虑这里。/etc/environment
:这个文件通常用于设置系统范围的环境变量,不执行任何脚本,只是简单的KEY=VALUE
格式。
最常见的错误就是把配置写到了一个不生效的地方,比如在 ~/.bashrc
里改了,但通过 sudo
运行命令时却发现 JAVA_HOME
没生效,因为 sudo
默认不会加载用户的环境变量。这时候可能需要在 sudo
命令前加上 sudo env "PATH=$PATH" "JAVA_HOME=$JAVA_HOME" your_command
,或者在 /etc/profile.d/
下创建新的脚本来设置系统级变量。
另一个常见的错误是路径配置不正确。可能是JDK的安装路径写错了,或者是 PATH
变量中没有包含 $JAVA_HOME/bin
。例如,你可能写成了 export JAVA_HOME="/usr/lib/jvm/java-17"
,但实际上可执行文件在 java-17/bin
目录下。所以,export PATH="$JAVA_HOME/bin:$PATH"
这一步至关重要,它把JDK的 bin
目录加到系统的可执行路径中,这样你才能直接运行 java
或 javac
命令。
再有就是忘记 source
命令。修改了 ~/.bashrc
或 ~/.profile
后,这些更改并不会立即生效。你必须手动执行 source ~/.bashrc
或 source ~/.profile
,或者关闭并重新打开终端会话,才能让新的环境变量加载进来。很多人改完文件就直接 java -version
,然后发现没变,就以为配置失败了。
最后,版本冲突也是个隐性问题。如果你的系统安装了多个JDK版本,而 PATH
变量中包含的顺序不明确,或者 update-alternatives
等工具没有正确配置,可能会导致 java -version
报告一个版本,而实际编译时却使用了另一个版本,这在Spring项目开发中可能会引发各种奇怪的兼容性问题。通常,我会用 update-alternatives --config java
和 update-alternatives --config javac
来明确指定系统默认的JDK版本。
这些小细节,虽然看起来不值一提,但在实际操作中却能让你抓狂,所以务必仔细检查。
如何快速启动一个Spring Boot项目,并确保其在Linux上正常运行?
在Linux上快速启动并运行Spring Boot项目,其实非常直接,因为它被设计成一个自包含(self-contained)的可执行JAR包。以下是我通常的操作步骤:
1. 创建Spring Boot项目
最快捷的方式是使用 Spring Initializr (start.spring.io)。这是一个Web界面,你可以选择项目的元数据(Maven/Gradle、Java版本、Group、Artifact等)以及所需的依赖项(比如Spring Web、Spring Data JPA等)。
- 访问
start.spring.io
。 - 选择
Maven Project
或Gradle Project
。 - 选择你的Java版本(比如
17
)。 - 添加
Spring Web
依赖。 - 点击
Generate
下载项目压缩包。
解压后,你会得到一个标准的Maven或Gradle项目结构。
2. 构建项目
进入项目根目录,使用你选择的构建工具来打包项目。
使用Maven:
cd your-spring-boot-project mvn clean package
这个命令会清理旧的构建产物,然后编译代码、运行测试(如果存在),并将项目打包成一个可执行的JAR文件。通常,这个JAR文件会位于
target/
目录下,命名类似于your-project-name-0.0.1-SNAPSHOT.jar
。使用Gradle:
cd your-spring-boot-project gradle clean build
对于Gradle,可执行JAR文件通常在
build/libs/
目录下,命名类似于your-project-name-0.0.1-SNAPSHOT.jar
。
构建成功后,你就能看到那个自包含的JAR包了。
3. 运行Spring Boot应用
在Linux服务器上运行这个JAR包非常简单,只需要一个Java运行时环境(JRE或JDK)。
java -jar target/your-project-name-0.0.1-SNAPSHOT.jar # 或者对于Gradle java -jar build/libs/your-project-name-0.0.1-SNAPSHOT.jar
Spring Boot应用启动后,你会在终端看到详细的日志输出,包括它监听的端口(通常是8080)。
确保正常运行的注意事项:
- 端口占用: 如果你的应用默认监听8080端口,而服务器上已经有其他服务占用了这个端口,Spring Boot应用会启动失败。你可以在
application.properties
或application.yml
中配置server.port=8081
来更改端口,或者通过命令行参数java -jar your-app.jar --server.port=8081
。 - 防火墙: 即使应用成功启动并监听了端口,如果Linux服务器的防火墙(如
ufw
或firewalld
)没有开放该端口,外部也无法访问。你需要根据你的防火墙配置规则来开放端口,例如:# 对于ufw sudo ufw allow 8080/tcp sudo ufw enable
# 对于firewalld sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent sudo firewall-cmd --reload
- 权限问题: 确保运行JAR包的用户有足够的权限访问项目目录、日志文件写入目录等。虽然Spring Boot应用通常不需要特殊的系统权限,但在某些特定场景下(例如访问某些受保护的目录),这可能是个问题。
- 内存分配: 对于较大的Spring Boot应用,可能需要为JVM分配更多的内存。你可以在
java -jar
命令中添加JVM参数:java -Xmx512m -Xms256m -jar target/your-project-name-0.0.1-SNAPSHOT.jar
这会设置最大堆内存为512MB,初始堆内存为256MB。
- 后台运行与日志管理: 在生产环境中,你通常不希望应用在前台运行。可以使用
nohup
命令或者systemd
服务来管理Spring Boot应用:# 使用nohup nohup java -jar target/your-project-name-0.0.1-SNAPSHOT.jar > app.log 2>&1 &
更好的方式是创建一个
systemd
服务单元,这样可以更好地控制应用的启动、停止和重启,并集成到系统的日志管理中。
通过这些步骤和注意事项,你应该能比较顺利地在Linux上部署和运行你的Spring Boot应用了。
以上就是《Linux下Java与Spring环境配置详解》的详细内容,更多关于java,Spring,Linux,环境变量,jdk的资料请关注golang学习网公众号!

- 上一篇
- PHP内存回收机制全解析

- 下一篇
- LarkPC集成第三方应用教程
-
- 文章 · java教程 | 1小时前 |
- Java实用类使用详解与技巧
- 355浏览 收藏
-
- 文章 · java教程 | 2小时前 |
- Java线程池饱和策略解析与选择技巧
- 164浏览 收藏
-
- 文章 · java教程 | 2小时前 |
- Gson解析空JSON列表的技巧
- 433浏览 收藏
-
- 文章 · java教程 | 3小时前 | java 类型转换 泛型 instanceof ClassCastException
- Java防止ClassCastException的技巧
- 415浏览 收藏
-
- 文章 · java教程 | 3小时前 |
- Java封装原理与代码实现解析
- 298浏览 收藏
-
- 文章 · java教程 | 3小时前 |
- JavaListIterator修改集合方法详解
- 444浏览 收藏
-
- 文章 · java教程 | 3小时前 |
- Java加密方法:MD5与SHA实战解析
- 379浏览 收藏
-
- 文章 · java教程 | 4小时前 |
- Java构造方法详解与调用方式
- 128浏览 收藏
-
- 文章 · java教程 | 4小时前 |
- Java分布式事务最终一致性解决方案
- 226浏览 收藏
-
- 文章 · java教程 | 4小时前 |
- Java:List元素分组为新Map的技巧
- 106浏览 收藏
-
- 文章 · java教程 | 5小时前 |
- Java简单表单验证实现方法
- 170浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 499次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
-
- 数说Social Research-社媒分析AI Agent
- 数说Social Research是数说故事旗下社媒智能研究平台,依托AI Social Power,提供全域社媒数据采集、垂直大模型分析及行业场景化应用,助力品牌实现“数据-洞察-决策”全链路支持。
- 29次使用
-
- 先见AI
- 先见AI,北京先智先行旗下企业级商业智能平台,依托先知大模型,构建全链路智能分析体系,助力政企客户实现数据驱动的科学决策。
- 33次使用
-
- 职优简历
- 职优简历是一款AI辅助的在线简历制作平台,聚焦求职场景,提供免费、易用、专业的简历制作服务。通过Markdown技术和AI功能,帮助求职者高效制作专业简历,提升求职竞争力。支持多格式导出,满足不同场景需求。
- 29次使用
-
- 一键证照
- 告别传统影楼!一键证照,AI智能在线制作证件照,覆盖证件照、签证照等多种规格,免费美颜,快速生成符合标准的专业证件照,满足学生、职场人、出境人群的证件照需求。
- 30次使用
-
- 幂简AI提示词商城
- 幂简AI提示词商城是国内领先的专业级AI提示词模板交易平台,致力于降低优质提示词创作门槛,提升AI助手使用效率。提供3K+多领域专业提示词模板,支持变量替换、跨AI模型适配、API集成,解决提示词复用性低、效果不稳定、创作耗时等痛点。
- 31次使用
-
- 提升Java功能开发效率的有力工具:微服务架构
- 2023-10-06 501浏览
-
- 掌握Java海康SDK二次开发的必备技巧
- 2023-10-01 501浏览
-
- 如何使用java实现桶排序算法
- 2023-10-03 501浏览
-
- Java开发实战经验:如何优化开发逻辑
- 2023-10-31 501浏览
-
- 如何使用Java中的Math.max()方法比较两个数的大小?
- 2023-11-18 501浏览