无法安装'openjdk-9-jdk',因为它试图覆盖已经包含在'openjdk-9-jdk-headless'中的文件。

我正在运行Ubuntu 16.04 Xenial桌面版,64位,并且想要安装openjdk-9-jdk(Java 9开发工具包)。从universe软件源中可用的版本是9~b114-0ubuntu1。
运行安装命令成功安装了依赖项(请参见下文,包括openjdk-9-jdk-headless软件包),但由于一个文件存在于有问题的软件包中并且也由所需的依赖项提供,因此无法安装所请求的软件包。
dpkg: error processing archive /var/cache/apt/archives/openjdk-9-jdk_9~b114-0ubuntu1_amd64.deb (--unpack):
 trying to overwrite '/usr/lib/jvm/java-9-openjdk-amd64/include/linux/jawt_md.h', which is also in package openjdk-9-jdk-headless:amd64 9~b114-0ubuntu1

这是完整的输出:
$ sudo apt install openjdk-9-jdk
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  ca-certificates-java libice-dev libpthread-stubs0-dev libsm-dev libx11-dev libx11-doc libxau-dev libxcb1-dev libxdmcp-dev
  libxt-dev openjdk-9-jdk-headless openjdk-9-jre openjdk-9-jre-headless x11proto-core-dev x11proto-input-dev x11proto-kb-dev
  xorg-sgml-doctools xtrans-dev
Suggested packages:
  libice-doc libsm-doc libxcb-doc libxt-doc openjdk-9-demo openjdk-9-source visualvm icedtea-8-plugin fonts-ipafont-gothic
  fonts-ipafont-mincho ttf-wqy-microhei | ttf-wqy-zenhei fonts-indic
The following NEW packages will be installed
  ca-certificates-java libice-dev libpthread-stubs0-dev libsm-dev libx11-dev libx11-doc libxau-dev libxcb1-dev libxdmcp-dev
  libxt-dev openjdk-9-jdk openjdk-9-jdk-headless openjdk-9-jre openjdk-9-jre-headless x11proto-core-dev x11proto-input-dev
  x11proto-kb-dev xorg-sgml-doctools xtrans-dev
0 to upgrade, 19 to newly install, 0 to remove and 0 not to upgrade.
Need to get 183 MB/187 MB of archives.
After this operation, 326 MB of additional disk space will be used.
Do you want to continue? [Y/n] 
Get:1 http://ftp.uni-stuttgart.de/ubuntu xenial/main amd64 ca-certificates-java all 20160321 [12,9 kB]
Get:2 http://ftp.uni-stuttgart.de/ubuntu xenial/universe amd64 openjdk-9-jre-headless amd64 9~b114-0ubuntu1 [183 MB]
Get:3 http://ftp.uni-stuttgart.de/ubuntu xenial/universe amd64 openjdk-9-jre amd64 9~b114-0ubuntu1 [51,5 kB]                       
Fetched 183 MB in 2min 21s (1.293 kB/s)                                                                                            
Selecting previously unselected package ca-certificates-java.
(Reading database ... 210101 files and directories currently installed.)
Preparing to unpack .../ca-certificates-java_20160321_all.deb ...
Unpacking ca-certificates-java (20160321) ...
Selecting previously unselected package openjdk-9-jre-headless:amd64.
Preparing to unpack .../openjdk-9-jre-headless_9~b114-0ubuntu1_amd64.deb ...
Unpacking openjdk-9-jre-headless:amd64 (9~b114-0ubuntu1) ...
Selecting previously unselected package xorg-sgml-doctools.
Preparing to unpack .../xorg-sgml-doctools_1%3a1.11-1_all.deb ...
Unpacking xorg-sgml-doctools (1:1.11-1) ...
Selecting previously unselected package x11proto-core-dev.
Preparing to unpack .../x11proto-core-dev_7.0.28-2ubuntu1_all.deb ...
Unpacking x11proto-core-dev (7.0.28-2ubuntu1) ...
Selecting previously unselected package libice-dev:amd64.
Preparing to unpack .../libice-dev_2%3a1.0.9-1_amd64.deb ...
Unpacking libice-dev:amd64 (2:1.0.9-1) ...
Selecting previously unselected package libpthread-stubs0-dev:amd64.
Preparing to unpack .../libpthread-stubs0-dev_0.3-4_amd64.deb ...
Unpacking libpthread-stubs0-dev:amd64 (0.3-4) ...
Selecting previously unselected package libsm-dev:amd64.
Preparing to unpack .../libsm-dev_2%3a1.2.2-1_amd64.deb ...
Unpacking libsm-dev:amd64 (2:1.2.2-1) ...
Selecting previously unselected package libxau-dev:amd64.
Preparing to unpack .../libxau-dev_1%3a1.0.8-1_amd64.deb ...
Unpacking libxau-dev:amd64 (1:1.0.8-1) ...
Selecting previously unselected package libxdmcp-dev:amd64.
Preparing to unpack .../libxdmcp-dev_1%3a1.1.2-1.1_amd64.deb ...
Unpacking libxdmcp-dev:amd64 (1:1.1.2-1.1) ...
Selecting previously unselected package x11proto-input-dev.
Preparing to unpack .../x11proto-input-dev_2.3.1-1_all.deb ...
Unpacking x11proto-input-dev (2.3.1-1) ...
Selecting previously unselected package x11proto-kb-dev.
Preparing to unpack .../x11proto-kb-dev_1.0.7-0ubuntu1_all.deb ...
Unpacking x11proto-kb-dev (1.0.7-0ubuntu1) ...
Selecting previously unselected package xtrans-dev.
Preparing to unpack .../xtrans-dev_1.3.5-1_all.deb ...
Unpacking xtrans-dev (1.3.5-1) ...
Selecting previously unselected package libxcb1-dev:amd64.
Preparing to unpack .../libxcb1-dev_1.11.1-1ubuntu1_amd64.deb ...
Unpacking libxcb1-dev:amd64 (1.11.1-1ubuntu1) ...
Selecting previously unselected package libx11-dev:amd64.
Preparing to unpack .../libx11-dev_2%3a1.6.3-1ubuntu2_amd64.deb ...
Unpacking libx11-dev:amd64 (2:1.6.3-1ubuntu2) ...
Selecting previously unselected package libx11-doc.
Preparing to unpack .../libx11-doc_2%3a1.6.3-1ubuntu2_all.deb ...
Unpacking libx11-doc (2:1.6.3-1ubuntu2) ...
Selecting previously unselected package libxt-dev:amd64.
Preparing to unpack .../libxt-dev_1%3a1.1.5-0ubuntu1_amd64.deb ...
Unpacking libxt-dev:amd64 (1:1.1.5-0ubuntu1) ...
Selecting previously unselected package openjdk-9-jre:amd64.
Preparing to unpack .../openjdk-9-jre_9~b114-0ubuntu1_amd64.deb ...
Unpacking openjdk-9-jre:amd64 (9~b114-0ubuntu1) ...
Selecting previously unselected package openjdk-9-jdk-headless:amd64.
Preparing to unpack .../openjdk-9-jdk-headless_9~b114-0ubuntu1_amd64.deb ...
Unpacking openjdk-9-jdk-headless:amd64 (9~b114-0ubuntu1) ...
Preparing to unpack .../openjdk-9-jdk_9~b114-0ubuntu1_amd64.deb ...
Unpacking openjdk-9-jdk:amd64 (9~b114-0ubuntu1) ...
dpkg: error processing archive /var/cache/apt/archives/openjdk-9-jdk_9~b114-0ubuntu1_amd64.deb (--unpack):
 trying to overwrite '/usr/lib/jvm/java-9-openjdk-amd64/include/linux/jawt_md.h', which is also in package openjdk-9-jdk-headless:amd64 9~b114-0ubuntu1
Processing triggers for ca-certificates (20160104ubuntu1) ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for gnome-menus (3.13.3-6ubuntu3) ...
Processing triggers for desktop-file-utils (0.22-1ubuntu5) ...
Processing triggers for bamfdaemon (0.5.3~bzr0+16.04.20160415-0ubuntu1) ...
Rebuilding /usr/share/applications/bamf-2.index...
Processing triggers for mime-support (3.59ubuntu1) ...
Processing triggers for hicolor-icon-theme (0.15-0ubuntu1) ...
Errors were encountered while processing:
 /var/cache/apt/archives/openjdk-9-jdk_9~b114-0ubuntu1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

显然,这似乎是一个错误,是由于错误的打包而不是我的问题。在Launchpad上已经有一些相关的错误报告,比如这个看起来最重要的报告。我订阅了那个报告,但对于Xenial还没有解决方案。
因此,我在这里的问题不是关于这个打包错误,而是如何绕过这个错误并安装openjdk-9-jdk,无视"试图覆盖文件"的错误?

@NickWeinberg openjdk-9-jdk-headless 包是 openjdk-9-jdk 的必需依赖项,因此我无法省略它。 - Byte Commander
3请注意,这似乎是由于openjdk9的错误打包造成的:https://bugs.launchpad.net/ubuntu/+source/openjdk-9/+bug/1593191 - stewbasic
1@Stewbasic,你知道这个是否会被纠正吗?听起来有点荒谬。 - Adrian M.
@AdrianM. 或许可以在错误报告中询问一下(请参考我评论中的链接)?就我个人而言,我对于版本9没有特别的需求,所以我选择降级到了8。 - stewbasic
1只是给其他人看到这个帖子的一个提示。版本9~b114-0ubuntu1已经过时,目前并不实用。有更新的版本,但它们需要被回溯到xenial或手动安装:https://packages.ubuntu.com/search?keywords=openjdk-9-jdk - MeTTeO
2个回答

你可以直接执行sudo apt-get -o Dpkg::Options::="--force-overwrite" install openjdk-9-jdk。如果你在这里,说明你已经尝试过没有使用-o Dpkg::Options::="--force-overwrite"的安装方式,并且你知道哪些文件将会被静默覆盖。

1语法正确,安装过程中没有错误信息。我猜它和你的解决方案一样:覆盖文件的安装。 - Dominic108

我能够通过在安装.deb包时强制覆盖文件来自己解决错误,使用dpkg
以下是我在Ubuntu 16.04 Xenial上安装openjdk-9-jdk的解决方法(未在其他版本上测试),尽管出现了关于不能覆盖其依赖项openjdk-9-jdk-headless提供的文件的错误消息。
通常尝试安装openjdk-9-jdk软件包,最好使用包管理器apt
sudo apt install openjdk-9-jdk
这将安装所有依赖项并下载二进制软件包文件。现在应该存储在/var/cache/apt/archives/openjdk-9-jdk_9~b114-0ubuntu1_amd64.deb,但是文件名的后半部分可能因为您使用的不同版本而有所不同。
请注意,我们预计此单个命令会失败,并显示问题中描述的错误消息。忽略该错误,我们将在下一步处理它。
由于安装openjdk-9-jdk失败并被中止,依赖软件包尚未完全配置。我们现在必须手动进行配置,并触发所有尚未配置的软件包的配置:
sudo dpkg --configure -a
最后,我们安装我们的openjdk-9-jdk软件包。因此,我们使用在第1步中获得的已下载和缓存的二进制软件包文件。我们必须添加--force-overwrite标志,以使软件包管理器忽略我们提供的重复文件,并静默地覆盖它。
sudo dpkg -i --force-overwrite '/var/cache/apt/archives/openjdk-9-jdk_9~b114-0ubuntu1_amd64.deb'
如果您使用的是不同版本,则可能需要调整文件名,或者只需在输入文件名后使用制表符自动完成:在输入文件名直到下划线(...openjdk-9-jdk_)后按下Tab键,它应该自动完成正确的文件名。

2不确定我们在这里确切地做什么,但对我来说有效。 :-) - ankush981
1太棒了!谢谢你!如果可能的话,我认为最好接受这个答案,因为它更详细和逐步说明。 - Edson Horacio Junior
似乎有效,但后来由于某些无关原因需要降级到8时,我在启动时遇到错误:https://bugs.launchpad.net/ubuntu/+source/openjdk-9/+bug/1550950 - Barry Staes
我进行了测试:是的,在这个openjdk-9-jdk(openjdk-9-jdk_9b114-0ubuntu1_amd64)中,文件"jawt_md.h"与这个openjdk-9-jdk-headless(openjdk-9-jdk-headless_9b114-0ubuntu1_amd64)完全相同。安装了jdk-headless;将"jawt_md.h"复制到临时位置;安装了jdk;进行了比较。确认:在强制覆盖后已成功安装内容。可以尝试先移除jdk-headless - 提示您同时移除两者。注意:先移除jdk会导致"jawt_md.h"被移除,而这个文件通常由jdk-headless提供,用于构建处理AWT图形的程序(虽然是无头的,即不显示)。 - Aaron Mansheim