Ubuntu Java编译时版本冲突解决方法
首先确认系统中已安装的Java版本,使用以下命令查看java和javac(编译器)的版本:
java -version
javac -version
这一步能快速识别系统中存在的Java版本,为后续操作提供依据。
update-alternatives管理默认Java版本Ubuntu自带的update-alternatives工具可方便地切换系统默认Java版本。
sudo update-alternatives --config java,会列出所有已安装的Java版本(如/usr/lib/jvm/java-8-openjdk-amd64/bin/java),输入对应数字选择默认版本;同理,运行sudo update-alternatives --config javac设置默认编译器版本。sudo update-alternatives --install /usr/bin/java java /path/to/new/java/bin/java 优先级命令添加,其中“优先级”数字越大越优先被选中。若系统级切换不满足需求(如项目级配置),可修改用户环境变量:
~/.bashrc文件(或~/.zshrc,取决于Shell),添加以下内容(以Java 11为例):export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64(替换为实际安装路径)export PATH=$JAVA_HOME/bin:$PATHsource ~/.bashrc。echo $JAVA_HOME和java -version验证环境变量是否设置正确。若系统中存在多个无用Java版本,可通过以下命令卸载:
sudo apt list --installed | grep openjdk(以OpenJDK为例);sudo apt-get purge openjdk-8-jdk(替换为目标版本);sudo apt-get autoremove。对于复杂场景(如频繁切换多个Java版本),可使用第三方工具简化操作:
curl -s "https://get.sdkman.io" | bash,然后运行source "$HOME/.sdkman/bin/sdkman-init.sh";使用sdk install java 11.0.24-open安装Java 11,sdk use java 11.0.24-open切换版本。git clone https://github.com/jenv/jenv.git ~/.jenv,添加export PATH="$HOME/.jenv/bin:$PATH"和eval "$(jenv init -)"到~/.bashrc,然后通过jenv add /usr/lib/jvm/java-11-openjdk-amd64添加版本,jenv global 11.0.24设置全局版本。若不想改变系统默认版本,可在编译时通过-source和-target参数指定版本:
javac -source 1.8 -target 1.8 YourClass.java(指定Java 8标准)。
对于Maven项目,在pom.xml中添加:
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
对于Gradle项目,在build.gradle中添加:
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
这种方式能确保编译时使用指定版本,避免系统默认版本的影响。
若项目对Java版本要求严格(如遗留项目),可使用Docker创建隔离容器:
docker pull openjdk:11-jdk(Java 11);docker run -it --rm openjdk:11-jdk bash;