Arch linux - 更新软件包时出错:jdk-openjdk 和 jre-openjdk 存在冲突

Jan*_*rný 2 arch-linux java pacman package-management

当我尝试更新系统时出现jdk-openjdk and jre-openjdk are in conflict 错误:

这是更新尝试的日志:

:: Synchronizing package databases...
 core is up to date
 extra is up to date
 community is up to date
 multilib is up to date
:: Searching AUR for updates...
:: Searching databases for updates...
 -> Packages not in AUR: bunjs-bin  flite1-patched  jellyfin-server-bin  jellyfin-web-bin  js78  libgweather  libopenaptx  libvterm01  nodejs-lts-gallium  progsreiserfs  python-backcall
 -> Orphan (unmaintained) AUR Packages: anki-official-binary-bundle  jdk-jetbrains  jetbrains-clion-pj  python-gymnasium-notices  python-hijri-converter  python-jax-jumpy  python-pep517
 -> Flagged Out Of Date AUR Packages: anki-official-binary-bundle  blades-bin  logseq-desktop-wayland-bin  marp-cli  python-mypy-protobuf  steamcmd  vrms-arch
 -> gcc10: local (1:10.3.0-2) is newer than AUR (10.5.0-1)
 -> gcc10-libs: local (1:10.3.0-2) is newer than AUR (10.5.0-1)
:: 8 packages to upgrade/install.
8  extra/jdk-openjdk             21.u35-3     -> 21.u35-7
7  extra/jdk11-openjdk           11.0.21.u9-2 -> 11.0.21.u9-3
6  extra/jre-openjdk             21.u35-3     -> 21.u35-7
5  extra/jre-openjdk-headless    21.u35-3     -> 21.u35-7
4  extra/jre11-openjdk           11.0.21.u9-2 -> 11.0.21.u9-3
3  extra/jre11-openjdk-headless  11.0.21.u9-2 -> 11.0.21.u9-3
2  extra/jre17-openjdk           17.0.9.u8-1  -> 17.0.9.u8-2
1  extra/jre17-openjdk-headless  17.0.9.u8-1  -> 17.0.9.u8-2
==> Packages to exclude: (eg: "1 2 3", "1-3", "^4" or repo name)
 -> Excluding packages may cause partial upgrades and break systems
==>
Sync Dependency (4): jre11-openjdk-headless-11.0.21.u9-3, jre17-openjdk-headless-17.0.9.u8-2, jre-openjdk-headless-21.u35-7, jre11-openjdk-11.0.21.u9-3
Sync Explicit (4): jre17-openjdk-17.0.9.u8-2, jdk-openjdk-21.u35-7, jdk11-openjdk-11.0.21.u9-3, jre-openjdk-21.u35-7
:: Synchronizing package databases...
 core is up to date
 extra is up to date
 community is up to date
 multilib is up to date
:: Starting full system upgrade...
resolving dependencies...
looking for conflicting packages...
error: unresolvable package conflicts detected
error: failed to prepare transaction (conflicting dependencies)
:: jdk-openjdk and jre-openjdk are in conflict
 -> error installing repo packages
Run Code Online (Sandbox Code Playgroud)

解决这一冲突的最佳方法是什么?
谢谢你的帮助


编辑:
我尝试过sudo pacman -R jre-openjdk,但收到此错误:

checking dependencies...
error: failed to prepare transaction (could not satisfy dependencies)
:: removing jre-openjdk breaks dependency 'jre21-openjdk=21.u35-3' required by jdk-openjdk
Run Code Online (Sandbox Code Playgroud)

ter*_*don 7

对于此类事情,请务必查看Arch Linux News。在这种情况下,我们希望JDK / JRE 21 包中的传入更改可能需要手动干预

JDK / JRE 21 包中的传入更改可能需要手动干预

2023-11-02 - 弗雷德里克·施万

我们正在对发行版的 JDK/JRE 包进行更改。这是由现代版本的 Java (>9) 中构建 JRE 的方式触发的。我们在 Java 21 中引入了这一更改。

总而言之,我们不会让 JDK 和 JRE 包共存于同一个系统中,而是会让它们发生冲突。JDK变体包中包含了执行Java应用程序的运行时环境,因此以后如果需要Java的编译和运行时,只需要JDK包即可。另一方面,如果他们只需要 Java 运行时,那么 JRE(或 jre-headless)就可以工作。

这(可能)需要在升级期间进行手动用户操作:

如果您同时安装了 JDK 和 JRE,您可以手动安装 JDK pacman -Syu jdk-openjdk,这会删除 JRE 相关包。如果您同时拥有 JRE 和 JRE-headless,则需要选择其中之一并手动安装,因为它们现在会相互冲突。如果您只有 JDK/JRE/JRE-headless pacman 之一,应该可以正常解析依赖关系,无需执行任何操作。目前,这仅对即将发布的 JDK 21 版本有效。

就我的具体情况而言,我昨天修复了这个问题:

sudo pacman -R jre-openjdk
sudo pacman -Suy
Run Code Online (Sandbox Code Playgroud)

但具体细节取决于您安装的内容以及您需要的内容,如引用的文章中所述。

  • @JanČerný 我的建议是阅读这篇文章并根据您的情况做有意义的事情。尝试使用“sudo pacman -R jdk-openjdk jre-openjdk”删除两者,然后使用“sudo pacman -Suy”。 (3认同)