我已经安装了 Oracle Java。我希望能够删除 OpenJDK,但在尝试这样做时apt
想要安装另一个版本的 Java。
我如何配置apt
才能知道我已经安装了第三方 Java,以便我可以删除这些 OpenJDK 软件包?
答案1
为虚拟包创建控制文件。该程序
equiv-controls
创建一个模板。给它一个文件名。equivs-control oracle-jre.control
编辑控制文件。至少将该
Package:
行设置为sun-java6-jre
(已失效的 Sun/Oracle Java 包的名称)。你还应该写一个有意义的Description:
,设置节为java
。声明该包Provides: java-6-runtime
和其他版本(这是其他程序所依赖的虚拟包,可以通过检查openjdk-6-jre
提供了什么以及各个程序需要什么来找到它)。该文件可能如下所示:Section: java Priority: optional Standards-version: 3.9.2 Package: sun-6-jre Provides: java6-runtime, java-runtime Description: dummy package when Oracle Java is installed
使用您创建的控制文件创建 Debian 软件包。该软件包仅用于依赖项,不安装任何文件。
equivs-build oracle-jre.control
安装生成的 deb 包。
sudo dpkg -i sun-6-jre_1.0_all.deb
答案2
我不相信有一种方法可以做到这一点。您可以代替使用为您提供.deb
Java 包的PPA 存储库这个脚本尝试一下,它将滚动您自己的 Java 安装的 .deb 包。
这个脚本叫做OAB-Java, 具体来说oab-java.sh
。
例子
下载脚本:
cd ~/
wget https://github.com/flexiondotorg/oab-java6/raw/0.2.8/oab-java.sh -O oab-java.sh
chmod +x oab-java.sh
sudo ./oab-java.sh
该脚本采用以下开关:
-7
:构建 oracle-java7 软件包而不是 sun-java6-c
:从 中删除预先存在的软件包/var/local/oab/deb
和源/var/local/oab/src
。-k
:使用指定的现有密钥而不是生成一个-s
:如果包已经存在则跳过构建-t
:指定要从上游 Debian 打包脚本使用的 Java 版本标记。-h
: 这个有帮助
要准备并安装 Oracle 6.deb
文件:
$ sudo ./oab-java.sh
$ sudo apt-get install sun-java6-jre
要准备并安装 Oracle 7.deb
文件:
$ sudo ./oab-java.sh -7
$ sudo apt-get install oracle-java7-jre
答案3
@Gilles 给出的上述答案在一段时间内对我来说非常有效。但对于 Java 8 和更新版本的 Ubuntu,它不起作用。以下是oracle-jre.control
我现在使用的文件。
Section: java
Priority: optional
Standards-version: 3.9.2
Package: sun-8-jre
Provides: default-jre, openjdk-8-jre, openjfx
Description: Dummy package when Oracle Java is installed
答案4
您可以使用 apt-mark 保留某个包。
抓住:
sudo apt-mark hold package_name
取消按住:
sudo apt-mark unhold package_name
这将防止 apt 触摸它。