web-dev-qa-db-ja.com

パッケージリストでopenjdk-8-jdkが指定されているときに、openjdk-11-jreがmavenと一緒にインストールされるのはなぜですか?

パッケージmavendefault-jre-headless (>= 2:1.7) | Java7-runtime-headlessに依存します(Sudo dpkg -I /var/cache/apt/archives/maven_3.5.2-2_all.debによる)。 Docker内で実行されているUbuntu 18.04で次の動作に気付きました(画像docker:18.04):

apt-get update && apt-get install --yes openjdk-8-jdk
apt-get install --yes maven

jREがすでに提供されているため、OpenJDK 8 JDK(JREを含む)をインストールしてからMavenのみをインストールします。ただし、両方

apt-get update && apt-get install --yes maven openjdk-8-jdk

そして

apt-get update && apt-get install --yes openjdk-8-jdk maven

openJDK 11 JREがデフォルトのJREであるため、インストールされます。 apt-get installがパッケージリストをスキャンして依存関係が提供されているかどうかを確認しないのはなぜですか?私はこれまでのところ、apt-getが通常それを行うと言いますが、それに関する情報は見つかりません。

コマンドと結果の概要(maven-enforcer-pluginを介してJDK 8を必要とするプロジェクト)は、 https://gitlab.com/krichter/maven-enforcer-plugin-docker/pipelines/で提供されています。 26241321 。私のデスクトップUbuntu 18.04の動作が異なると信じる理由はありません。

説明されているシナリオの説明と、パッケージリストの解析を適応させる構成のヒントを探しています。これは私にとって問題ではなく、回避策は必要ありません。

私の意見では、同じリスト内のパッケージの依存関係を満たすパッケージの明示的な指定が暗黙的なデフォルトのインストールの必要性をオーバーライドする方がより直感的であるため、この動作は最適ではありません。 OpenJDK 8と11の両方をインストールする場合は、パッケージリストで両方を指定します。たぶん他の誰かがこのアイデアを持っていて、機能強化のリクエストを提出しました(おそらくUbuntuではなくDebianに)。リンクについては嬉しいです。

6
Karl Richter

これはおそらく、aptが依存関係ツリーをどのようにたどったかの結果です。 mavenパッケージの詳細 を見ると、次のように表示されます。

  • default-jre-headless(> = 2:1.7)
    標準のJavaまたはJava互換ランタイム(ヘッドレス)

    またはJava7-runtime-headless
    default-jre-headless、openjdk-11-jre-headless、openjdk-8-jre-headlessによって提供される仮想パッケージ

openjdk-8-jre-headlessが既にインストールされている場合、Java-7-runtime-headless依存関係は満たされ、aptはそこに追加のものをインストールする必要がありません。

一方、Java-7-runtime-headlessを満足するものが何もインストールされていない場合、aptは最初にdefault-jre-headlessに進みます。これは、インストール用に指定されたパッケージのいずれもが依存関係を満たさず、JDK 11インストールされます。それ以外の場合、この依存関係を満たすパッケージは別のパッケージの依存関係に埋もれているため、インストール用のパッケージのリストを作成する際にはCatch-22があります。

インストール用にJava7-runtime-headlessを提供するパッケージの1つを明示的に指定すると、aptは希望どおりに動作します。

# apt-get install --assume-no maven openjdk-8-jre-headless
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  ca-certificates ca-certificates-Java dbus fontconfig-config fonts-dejavu-core
  Java-common krb5-locales libaopalliance-Java libapache-pom-Java libapparmor1
  libatinject-jsr330-api-Java libavahi-client3 libavahi-common-data
  libavahi-common3 libbsd0 libcdi-api-Java libcommons-cli-Java
  libcommons-io-Java libcommons-lang3-Java libcommons-parent-Java libcups2
  libdbus-1-3 libexpat1 libfontconfig1 libfreetype6
  libgeronimo-annotation-1.3-spec-Java libgeronimo-interceptor-3.0-spec-Java
  libgssapi-krb5-2 libguava-Java libguice-Java libhawtjni-runtime-Java
  libjansi-Java libjansi-native-Java libjpeg-turbo8 libjpeg8 libjsr305-Java
  libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 liblcms2-2
  libmaven-parent-Java libmaven-resolver-Java libmaven-shared-utils-Java
  libmaven3-core-Java libnspr4 libnss3 libpcsclite1 libplexus-cipher-Java
  libplexus-classworlds-Java libplexus-component-annotations-Java
  libplexus-interpolation-Java libplexus-sec-dispatcher-Java
  libplexus-utils2-Java libpng16-16 libsisu-inject-Java libsisu-plexus-Java
  libslf4j-Java libsqlite3-0 libssl1.1 libwagon-file-Java
  libwagon-http-shaded-Java libwagon-provider-api-Java libx11-6 libx11-data
  libxau6 libxcb1 libxdmcp6 libxext6 libxi6 libxrender1 libxtst6
  multiarch-support openssl ucf x11-common
Suggested packages:
  default-dbus-session-bus | dbus-session-bus default-jre
  libaopalliance-Java-doc libatinject-jsr330-api-Java-doc libservlet3.1-Java
  libcommons-io-Java-doc libcommons-lang3-Java-doc cups-common krb5-doc
  krb5-user libasm-Java libcglib-Java libjsr305-Java-doc liblcms2-utils
  libmaven-shared-utils-Java-doc liblogback-Java pcscd
  libplexus-cipher-Java-doc libplexus-classworlds-Java-doc
  libplexus-interpolation-Java-doc libplexus-sec-dispatcher-Java-doc
  libplexus-utils2-Java-doc junit4 testng libcommons-logging-Java
  liblog4j1.2-Java libnss-mdns fonts-dejavu-extra fonts-ipafont-gothic
  fonts-ipafont-mincho fonts-wqy-microhei fonts-wqy-zenhei fonts-indic
The following NEW packages will be installed:
  ca-certificates ca-certificates-Java dbus fontconfig-config fonts-dejavu-core
  Java-common krb5-locales libaopalliance-Java libapache-pom-Java libapparmor1
  libatinject-jsr330-api-Java libavahi-client3 libavahi-common-data
  libavahi-common3 libbsd0 libcdi-api-Java libcommons-cli-Java
  libcommons-io-Java libcommons-lang3-Java libcommons-parent-Java libcups2
  libdbus-1-3 libexpat1 libfontconfig1 libfreetype6
  libgeronimo-annotation-1.3-spec-Java libgeronimo-interceptor-3.0-spec-Java
  libgssapi-krb5-2 libguava-Java libguice-Java libhawtjni-runtime-Java
  libjansi-Java libjansi-native-Java libjpeg-turbo8 libjpeg8 libjsr305-Java
  libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 liblcms2-2
  libmaven-parent-Java libmaven-resolver-Java libmaven-shared-utils-Java
  libmaven3-core-Java libnspr4 libnss3 libpcsclite1 libplexus-cipher-Java
  libplexus-classworlds-Java libplexus-component-annotations-Java
  libplexus-interpolation-Java libplexus-sec-dispatcher-Java
  libplexus-utils2-Java libpng16-16 libsisu-inject-Java libsisu-plexus-Java
  libslf4j-Java libsqlite3-0 libssl1.1 libwagon-file-Java
  libwagon-http-shaded-Java libwagon-provider-api-Java libx11-6 libx11-data
  libxau6 libxcb1 libxdmcp6 libxext6 libxi6 libxrender1 libxtst6 maven
  multiarch-support openjdk-8-jre-headless openssl ucf x11-common
0 upgraded, 78 newly installed, 0 to remove and 4 not upgraded.
Need to get 44.0 MB of archives.
After this operation, 138 MB of additional disk space will be used.
Do you want to continue? [Y/n] N
Abort.
6
muru