web-dev-qa-db-fra.com

Pourquoi openjdk-11-jre est-il installé avec maven quand openjdk-8-jdk est spécifié dans la liste des paquets?

Le package maven dépend de default-jre-headless (>= 2:1.7) | Java7-runtime-headless (selon Sudo dpkg -I /var/cache/apt/archives/maven_3.5.2-2_all.deb). J'ai remarqué le comportement suivant sur Ubuntu 18.04 s'exécutant dans Docker (image docker:18.04):

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

installez OpenJDK 8 JDK (y compris JRE), puis uniquement Maven, car un JRE est déjà fourni. Cependant les deux

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

et

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

openJDK 11 JRE doit être installé car il s’agit du JRE par défaut. Pourquoi apt-get install n'analyse-t-il pas la liste des paquets pour vérifier si des dépendances sont fournies? Je vais aller si loin et dire que apt-get fait généralement cela, même si je ne trouve aucune information à ce sujet.

Un aperçu de la commande et des résultats (avec un projet nécessitant JDK 8 à l'aide du maven-enforcer-plugin) est fourni à l'adresse https://gitlab.com/krichter/maven-enforcer-plugin-docker/pipelines./26241321 . Je n'ai aucune raison de croire que le comportement sur mon ordinateur de bureau Ubuntu 18.04 est différent.

Je cherche une explication du scénario décrit et peut-être un indice de configuration permettant d'adapter l'analyse de la liste de paquets. Ce n'est pas un problème pour moi et je n'ai besoin d'aucune solution de contournement.

A mon avis, ce comportement est sous-optimal car il est plus intuitif que la spécification explicite d'un package remplissant la dépendance d'un package de la même liste annule le besoin d'installer un paramètre implicite par défaut. Si vous souhaitez installer OpenJDK 8 et 11, vous devez les spécifier tous les deux dans la liste des packages. Peut-être que quelqu'un d'autre a eu cette idée et a déposé une demande d'amélioration (probablement à Debian plutôt qu'à Ubuntu). Je serais heureux du lien.

6
Karl Richter

C'est probablement le résultat de la façon dont apt parcourt l'arbre de dépendance. En regardant mavenles détails du paquet , on voit:

  • default-jre-headless (> = 2: 1.7)
    Standard Java ou Java runtime compatible (sans tête)

    ou Java7-runtime-headless
    paquet virtuel fourni par default-jre-headless, openjdk-11-jre-headless, openjdk-8-jre-headless

Si openjdk-8-jre-headless est déjà installé, alors la dépendance Java-7-runtime-headless est remplie et apt n'a pas besoin d'installer quoi que ce soit d'autre ici.

D'un autre côté, si rien qui satisfait à Java-7-runtime-headless n'est installé, alors apt ira d'abord pour default-jre-headless, car aucun des paquets nommés pour l'installation ne remplit ces dépendances, et JDK 11 est installé. Puisque sinon le paquet remplissant cette dépendance est enterré dans la dépendance d'un autre paquet, nous avons un Catch-22 pour créer la liste des paquets à installer.

Si vous nommez explicitement l'un des paquets fournissant Java7-runtime-headless pour l'installation, apt fonctionnera comme vous le souhaitez:

# 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