我正在尝试在安装 java 后安装 ANT。我的 Java 是 Sun Java 中的。
pc19@pc19-H110:~$ java -version
java version "20.0.2" 2023-07-18
Java(TM) SE Runtime Environment (build 20.0.2+9-78)
Java HotSpot(TM) 64-Bit Server VM (build 20.0.2+9-78, mixed mode, sharing)
pc19@-H110:~$ echo $JAVA_HOME
/usr/lib/jvm/jdk-20/bin/java
pc19@pc19-H110:~$ whereis java
java: /usr/bin/java /usr/share/java /usr/lib/jvm/jdk-20/bin/java
pc19@-H110:~$ sudo apt-get install ant
pc19@-H110:~$ java -version
openjdk version "11.0.20.1" 2023-08-24
OpenJDK Runtime Environment (build 11.0.20.1+1-post-Ubuntu-0ubuntu120.04)
OpenJDK 64-Bit Server VM (build 11.0.20.1+1-post-Ubuntu-0ubuntu120.04, mixed mode, sharing)
当我使用 ANT 安装时sudo apt get install ant
,它会覆盖 Sun Java 安装和 OpenJdk 安装。有人知道它的解决方法吗?
为什么ant安装会覆盖java?我该如何阻止它?
答案1
包管理器不知道您的 Oracle Java 安装。该ant
软件包需要 JRE,并且依赖于 或default-jre-headless
软件包java8-runtime-headless
。因此,安装时ant
会安装默认的 JRE,即 Ubuntu 20.04 上的 OpenJDK 11(apt install ant
会告诉你这一点)。 JRE 包重新配置/usr/bin/java
,并且由于它位于您的jdk-20/bin
目录之前,java
因此运行系统 JRE 而不是您的 JRE。
为了避免安装 OpenJDK 11,您可以通过创建虚拟包来告诉您的系统安装了无头 JRE default-jre-headless
;看如何使 apt 忽略已安装软件包的未实现的依赖关系?有关详细信息,请替换gstreamer0.10-plugins-good
为default-jre-headless
.