CentOS上Java编译最佳实践
一 环境准备与工具链
示例(以 OpenJDK 11 为例):
# 安装 JDK 与构建工具
sudo yum install -y java-11-openjdk-devel maven
# 或使用 Gradle(若仓库版本满足需求)
sudo yum install -y gradle
# 配置环境变量(/etc/profile.d/java.sh)
cat >/etc/profile.d/java.sh <<'EOF'
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export PATH=$JAVA_HOME/bin:$PATH
EOF
source /etc/profile.d/java.sh
# 验证
java -version
javac -version
mvn -version # 或 gradle -v
上述做法符合在 CentOS 上配置 JDK 与 Maven/Gradle 的通用实践,便于统一管理与多用户共享环境。
二 项目构建与并行化
export MAVEN_OPTS="-Xmx2g -XX:+UseG1GC"
mvn -T 1C clean package # 每个CPU核心1个线程
./gradlew build --parallel --max-workers=$(nproc)
并行与缓存是提升构建吞吐的关键手段;在 CentOS 上结合多核与构建工具提供的并行能力,可获得稳定收益。
三 编译期与运行期JVM调优
# 构建工具(Maven/Gradle 的 JVM 选项)
export MAVEN_OPTS="-Xmx2g -Xms2g -XX:+UseG1GC"
# 或 Gradle Wrapper 配置 org.gradle.jvmargs
java -Xms2g -Xmx2g -XX:+UseG1GC -jar app.jar
-XX:+PrintGCDetails -Xloggc:gc.log
合理的堆与 GC 选择能在编译与运行阶段同时受益,G1GC 通常是通用服务器的稳妥选项。
四 多版本共存与切换
# 安装两个版本示例(路径以实际为准)
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk/bin/java 101
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-11-openjdk/bin/javac 101
# 交互式选择默认版本
sudo update-alternatives --config java
sudo update-alternatives --config javac
这种方式安全、可回退,适合同时存在Java 8与Java 11/17等版本的开发与运维场景。
五 资源受限与系统优化
sudo dd if=/dev/zero of=/var/swapfile bs=1M count=4096
sudo chmod 600 /var/swapfile
sudo mkswap /var/swapfile
sudo swapon /var/swapfile
# 持久化
echo '/var/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
以上措施能在资源受限的虚拟机或小型实例上显著提升构建稳定性与成功率。