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

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

当我尝试更新系统时出现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

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


编辑:
我尝试过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

答案1

对于此类事情,请务必检查一下Arch Linux 新闻。在这种情况下,我们想要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

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

答案2

第一次更新jdk-openjdk,这将建议jre-openjdk按照中所述删除JDK / JRE 21 包中的传入更改可能需要手动干预

手动安装 JDK ...这会删除 JRE 相关包。

然后再进行全面升级。

sudo pacman -S jdk-openjdk
sudo pacman -Syu

相关内容