GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Warum denkt Apt, dass es diese zusätzliche Abhängigkeit braucht?

Ich arbeite an einigen Anweisungen zur Maschineneinrichtung und war überrascht, als ich herausfand, dass apt-get install A B kann sich anders verhalten als apt-get install A && apt-get install B .

Mein spezifisches Beispiel ist A == openjdk-7-jdk und B == ant .

Also openjdk-7-jdk hängt von openjdk-7-jre-headless ab , was ant erfüllt ’s-Abhängigkeit java6-runtime-headless . Aber wenn Sie sie als apt-get install openjdk-7-jdk ant installieren , APT scheint das nicht herauszufinden und installiert default-jre-headless . Aber wenn Sie openjdk-7-jdk installieren vor der Installation von ant , seine Abhängigkeit ist erfüllt und alles ist gut.

APT ist normalerweise schlau genug, um so etwas herauszufinden, also warum kann es das in diesem Fall nicht tun? Ich würde gerne besser verstehen, warum es so funktioniert, damit mich solche Dinge in Zukunft nicht wieder stolpern.

Akzeptierte Antwort:

Scheint, als würde hier eine Art „Gewichtssystem“ spielen:

$ aptitude why ant openjdk-7-jdk
p   ant                 Recommends ant-optional       
p   ant-optional        Suggests   libgnumail-java    
p   libgnumail-java     Suggests   libgnumail-java-doc
p   libgnumail-java-doc Recommends default-jdk-doc    
p   default-jdk-doc     Depends    openjdk-7-doc      
p   openjdk-7-doc       Suggests   openjdk-7-jdk

Wie Sie ant sehen können hängt von openjdk-7-jdk ab aufgrund einer komplizierten und komplizierten Menge an Vorschlägen, Empfehlungen und Abhängigkeiten bei der Verwendung von openjdk-6-jdk die Abhängigkeit ist direkter:

$ aptitude why ant openjdk-6-jdk
p   ant           Suggests default-jdk | java-compiler | java-sdk
p   openjdk-6-jdk Provides java-sdk

Natürlich aptitude Methoden der Abhängigkeitsauflösung, könnten sich von apt-get unterscheiden 's. Übrigens, wenn Sie eine Simulation von ant ausführen, ohne dass openjdk-7-jdk installiert ist, wird openjdk-6-jdk nicht gezogen:

$ sudo apt-get install ant
[sudo] password for braiam: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  ant-optional
Suggested packages:
  default-jdk java-compiler java-sdk ant-gcj ant-doc liboro-java junit
  libregexp-java jython antlr libbcel-java libjdepend-java libgnumail-java
  libcommons-net-java libjsch-java javacc ant-optional-gcj
The following NEW packages will be installed:
  ant ant-optional
0 upgraded, 2 newly installed, 0 to remove and 9 not upgraded.
Need to get 2,234 kB of archives.
After this operation, 3,041 kB of additional disk space will be used.
Do you want to continue [Y/n]? 

Wenn Sie die gleichen Methoden wie ich verwenden, könnten Sie vielleicht mehr herausfinden, da ich gerade Debian-Tests verwende und sich die Repositories in der Zwischenzeit geändert haben könnten.

Verwandte:Wie füge ich einen Eintrag für Ubuntu zum Windows 7-Startmenü in Ubuntu hinzu?
Ubuntu
  1. Linux – Warum entfernt Apt Autoremove nicht alle alten Kernel-Pakete auf einmal?

  2. Warum bricht das Hinzufügen eines Doppelpunkts dieses Grep-Muster?

  3. Warum funktioniert `exit &` nicht?

  4. Warum aktualisiert Apt den Kernel nicht mehr?

  5. Warum braucht Ubuntu zwei Kernel?

Warum überspringt Strg + Pfeil nach links keine Wörter?

Warum beginnt Plymouth so spät?

Warum verhält sich Ping -f so?

Warum sieht Libreoffice alt aus?

Warum funktioniert diese Regex nicht unter Linux?

Warum wird dieser ldapadd-Befehl mit einem ungültigen Syntaxfehler beendet?