パッケージmaven
はdefault-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に)。リンクについては嬉しいです。
これはおそらく、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.