一、为什么是 2022 年这一份
2022 年这个时间点,Linux 后端/前端开发环境进入"标准化"阶段:
- JDK 8 仍是企业主流(Spring Boot 2.x、Solr、大数据生态全靠它)
- JDK 17 在 2021-09 发布后逐步成新项目首选
- Maven 3.9(2023-01 发布)已经稳定,3.8 系列成为过去
- NVM 0.39.x(2021-2022 系列)稳定,Node 14/16/18 三版本并行
- npm 镜像 经历 npm.taobao.org → npmmirror.com 的迁移(2022-05)
- systemd 全面接管 Java 服务启动
这一篇覆盖 JDK 8 / Maven / NVM 三大主力工具的安装、镜像、版本管理、与 systemd 集成——后端/前端开发者的"装机手册"。
阅读建议:本文是"工具栈"性质——按"装什么 → 配什么 → 用什么"组织。
二、JDK 8 安装(2022 仍主流)
2.1 下载与解压
1
2
3
4
5
6
7
| # 下载 jdk-8u371-linux-x64.tar.gz
cd /usr/local
mkdir jdk
cd jdk
tar -xf jdk-8u371-linux-x64.tar.gz
# 解压到 /usr/local/jdk/jdk1.8.0_371
|
关于 8u371:Oracle JDK 8u371 是 2023-04 发布的。如果坚持 2022 时间线,可以选 8u341(2022-04)或 8u351(2022-10)。
2.2 环境变量
1
2
3
| export JAVA_HOME=/usr/local/jdk/jdk1.8.0_371
export CLASSPATH=$JAVA_HOME/bin:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=.:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
|
2.3 验证
1
2
3
4
| java -version
# java version "1.8.0_371"
# Java(TM) SE Runtime Environment (build 1.8.0_371-b11)
# Java HotSpot(TM) 64-Bit Server VM (build 25.371-b11, mixed mode)
|
三、Maven 3.9 安装
3.1 下载与解压
1
2
3
4
5
6
7
8
| cd /usr/local/maven
# 3.9.2(2023-01 发布的 3.9.2 仍是很多 CI 的稳定选择)
wget https://archive.apache.org/dist/maven/maven-3/3.9.2/binaries/apache-maven-3.9.2-bin.tar.gz
tar -xf apache-maven-3.9.2-bin.tar.gz
# 改名
mv apache-maven-3.9.2 apache-maven-3.9.2
|
3.2 更换 settings.xml
把默认的 conf/settings.xml 替换成公司/个人定制的(国内镜像、代理、私服等)。
1
2
3
4
5
6
| # 备份
cp /usr/local/maven/apache-maven-3.9.2/conf/settings.xml \
/usr/local/maven/apache-maven-3.9.2/conf/settings.xml.bak
# 替换
vim /usr/local/maven/apache-maven-3.9.2/conf/settings.xml
|
3.3 环境变量
1
2
| export MAVEN_HOME=/usr/local/maven/apache-maven-3.9.2
export PATH=$MAVEN_HOME/bin:$PATH
|
3.4 验证
1
2
3
4
5
6
| mvn -v
# Apache Maven 3.9.2 (21122926829f1ead511c958d89bd2f672198ae9f)
# Maven home: /usr/local/maven/apache-maven-3.9.2
# Java version: 1.8.0_371, vendor: Oracle Corporation, runtime: /usr/local/jdk/jdk1.8.0_371/jre
# Default locale: en_US, platform encoding: UTF-8
# OS name: "linux", version: "5.19.0-46-generic", arch: "amd64", family: "linux"
|
四、NVM 装 Node 多版本
4.1 下载 NVM 0.39.3
1
| wget https://github.com/nvm-sh/nvm/archive/refs/tags/v0.39.3.tar.gz
|
4.2 安装
1
2
3
4
| cd ~
mkdir .nvm
tar -zxvf v0.39.3.tar.gz --strip-components 1 -C /root/.nvm
rm -rf v0.39.3.tar.gz
|
4.3 环境变量
1
2
3
4
| export NVM_BIN="/root/.nvm/versions/node"
export NVM_DIR="/root/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
|
1
2
3
4
| source /etc/profile
source ~/.zshrc
nvm --version
|
4.4 设置镜像
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # Windows
nvm node_mirror https://npm.taobao.org/mirrors/node/
nvm npm_mirror https://npm.taobao.org/mirrors/npm/
# 2023-07-19 之后:原 taobao.org 改为 npmmirror.com
nvm node_mirror https://npmmirror.com/mirrors/node/
nvm npm_mirror https://npmmirror.com/mirrors/npm/
# Linux 改环境变量
vim /etc/profile
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node/
# 测试
curl $NVM_NODEJS_ORG_MIRROR
|
关于 npm 镜像迁移:2022-05-31 之后 npm.taobao.org 域名失效,全部迁移到 npmmirror.com。新项目必须用新域名。
4.5 装 Node 14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| # 查可用版本
nvm ls-remote
# 装 Node 14.21.3
nvm install v14.21.3
# 验证
whereis node
# node: /root/.nvm/versions/node/v14.21.3/bin/node
node -v
# v14.21.3
npm -v
# 6.14.18
|
4.6 多版本共存
1
2
3
4
5
6
7
8
9
| # 装第二个版本
nvm install v14.17.3
# 切换
nvm use v14.21.3
# 把 nvm 整体迁移到数据盘
mv /root/.nvm /data/jenkins/
# 改 NVM_DIR 路径
|
4.7 npm 镜像与 yarn
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| # 设 sass 镜像
npm config set sass_binary_site=https://npm.taobao.org/mirrors/node-sass
# 设 registry 镜像
npm config set registry https://registry.npmmirror.com
# 装 nrm(registry 切换器)
npm install -g nrm
nrm ls
nrm use taobao
# 装 yarn
npm i -g yarn
yarn -v
# 1.22.19
# 临时使用镜像
SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass npm install node-sass
|
五、zsh 下 Node 多版本切换
1
2
3
4
| vim ~/.zshrc
export NODE_HOME=/data/jenkins/.nvm/versions/node/v14.17.3
export PATH=$NODE_HOME/bin:$PATH
|
六、Jenkins 跑前端项目
1
2
3
4
5
6
7
8
9
| killall -9 node_modules || true
source /etc/profile
cd /home/docker/jenkins/workspace/safe-frontend-dev
rm -rf node_modules
npm config set sass_binary_site=https://npm.taobao.org/mirrors/node-sass
npm config set registry https://registry.npm.taobao.org/
npm -g i yarn
yarn
nohup yarn run serve > /dev/null 2>&1 &
|
七、用 systemd 启动 Java 微服务
7.1 准备启动脚本
1
2
| # 写微服务启动脚本
vim /home/project/safety/sh/gateway.sh
|
1
2
3
4
5
6
7
| #!/bin/bash
# gateway.sh 示例
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_371
export PATH=$JAVA_HOME/bin:$PATH
cd /home/project/safety
java -jar gateway.jar --spring.profiles.active=prod
|
1
| chmod +x /home/project/safety/sh/gateway.sh
|
7.2 写 service 文件
1
| vim /etc/systemd/system/gateway.service
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| [Unit]
Description=Gateway Service
After=network.target
[Service]
Type=simple
User=root
ExecStart=/home/project/safety/sh/gateway.sh
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
|
7.3 启动与管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| systemctl daemon-reload
# 启动
systemctl start gateway
# 开机启动
systemctl enable gateway
# 状态
systemctl status gateway
# 停止
systemctl stop gateway
# 失败重置
systemctl reset-failed gateway
# 卸载
rm -rf /etc/systemd/system/gateway.service
|
八、Java 反代启动命令
1
2
3
4
5
| # 远程调试
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5003 \
-Xverify:none \
-cp /jar/xjrsoft-base/lib/*:/jar/xjrsoft-base/config \
com.xjrsoft.BaseApplication
|
关于 jdwp 端口:调试端口要开放给开发机,不能开放在公网。生产环境记得移除 jdwp 参数。
九、envsubst 模板化配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| # 模板 t.yaml
cat << "EOF" > t.yaml
systeminfo:
OS: $OS
user: $USER
home: $HOME
args:
[
"$args"
]
EOF
# 脚本 t.sh
cat << "EOF" > t.sh
#!/usr/bin/env bash
export OS=$(uname -s)
export args="/wait.sh 10.8.33.127:8848 -t 0"
ports=(100 200 300)
nodePort=30000
for p in ${ports[*]}; do
nodePort=$[$nodePort+1]
sed -i "8a \ - name: port$p\n port: $p\n targetPort: $p\n nodePort: $nodePort" t.yaml
done
envsubst < t.yaml > t1.yaml
EOF
bash t.sh
|
场景:用一份模板 + 环境变量生成 K8s manifest / docker-compose / nginx 配置。
十、前置知识 / 下一步
- 想看 JDK 17/21 新特性 → 翻本系列《JDK 升级与新特性》
- 想看 Maven 私服(Nexus / Artifactory)→ 翻本系列《Maven 私服搭建》
- 想看 Node 微前端构建优化 → 翻独立文章
- 想看 systemd 高级用法(target、socket 激活)→ 翻本系列《Linux 监控与系统性能工具》
十一、参考资源
2024 视角:JDK 21 LTS 已经发布,Node 20/22 时代来了
2022 年写的那套"JDK 8 + Maven 3.9 + NVM + Node 14"在 2024 仍然可用,但新项目已经普遍升级。
一、JDK:JDK 17 已是新项目主流,JDK 21 LTS 已发布
JDK 21 LTS(2023-09 发布)是 2024 新项目首选——虚拟线程(Virtual Threads)正式 GA:
1
2
3
4
5
6
7
8
9
| // 虚拟线程写法(替代传统 Thread / ExecutorService)
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
IntStream.range(0, 10_000).forEach(i -> {
executor.submit(() -> {
Thread.sleep(Duration.ofSeconds(1));
return i;
});
});
}
|
JDK 17 LTS(2021-09 发布)仍是 2024 大量"半新"项目的目标版本。
JDK 8(2014)已 2022-03 进入"个人免费但商业收费"模式(Oracle),2024 新项目不应该用 Oracle JDK 8——改用:
- Adoptium Eclipse Temurin 8(免费、长期维护)
- Amazon Corretto 8(AWS 维护)
- Alibaba Dragonwell 8(国内阿里维护,对 JVM 调优有特化)
装新版:
1
2
3
4
5
| # Adoptium Temurin 21 (推荐)
apt install -y wget gnupg
wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor -o /usr/share/keyrings/adoptium.gpg
echo "deb [signed-by=/usr/share/keyrings/adoptium.gpg] https://packages.adoptium.net/artifactory/deb $(lsb_release -sc) main" > /etc/apt/sources.list.d/adoptium.list
apt update && apt install -y temurin-21-jdk
|
二、Maven 3.9 仍主流,但 Gradle 在 K8s / 云原生时代更受宠
- Maven 3.9.6(2024-02 发布)是 2024 的稳定版,
mvn -v 默认输出包含 Java version: 21.x。 - Gradle 8.x(2023-10 起)支持 Java 21 + Kotlin 2.0,新项目可以选 Gradle。
- Bazel(Google)和 Pants(Twitter)是更大规模 monorepo 项目的选择,但 2024 仍小众。
三、Node 20 LTS / 22 LTS 时代
- Node 18(2022 LTS)2025-04 EOL,Node 20 LTS(2023-04)是 2024 主流,Node 22 LTS(2024-10 发布)开始被新项目采用。
- NVM 0.39.7+ 仍是主流(但 2024 出现了 fnm 替代品,用 Rust 写、速度快 10 倍)。
- Node 22 内置
--experimental-strip-types(原生运行 TypeScript,无需 ts-node 编译)。
1
2
3
4
5
| # 2024 推荐:用 fnm 替代 nvm
curl -fsSL https://fnm.vercel.app/install | bash
fnm install 22
fnm use 22
node -v # v22.x.x
|
四、cn 镜像的变化
registry.npmmirror.com 仍是 2024 首选 npm 镜像。
新增 https://registry.npmmirror.com/-/binary/ 提供 Node 二进制镜像(替代 taobao 老的 npm.taobao.org/dist/)。
corepack(Node 16+ 内置)一站式管理 yarn / pnpm:
1
2
| corepack enable
corepack prepare yarn@stable --activate
|
五、systemd 启动 Java 服务的"v2 写法"
- 2024 推荐加 cgroup v2 资源限制 + 安全沙箱:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| [Service]
Type=simple
User=appuser
ExecStart=/usr/local/jdk/bin/java -jar /opt/app.jar
Restart=always
RestartSec=10
# 资源限制
CPUQuota=200%
MemoryMax=2G
MemoryHigh=1G
# 安全加固
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
# 现代化:动态用户
DynamicUser=yes
# 日志
StandardOutput=journal
StandardError=journal
|
六、容器化时代的开发环境
2024 大量新项目**不再用"装在系统里的 JDK"**这套——直接走容器:
1
2
3
4
5
| # 用容器跑 Maven 构建(避免污染系统)
docker run -it --rm \
-v $PWD:/app -w /app \
maven:3.9-eclipse-temurin-21 \
mvn clean package
|
容器化开发环境的优势:
- JDK 版本随项目走(不用每台机器装多个版本)
- 团队所有人 build 出来的产物一致
- CI/CD 用同一镜像
Dev Container(VS Code Remote Containers)+ GitHub Codespaces 是 2024 的"标准动作"——开发机里根本不装 JDK,全在容器里。