为什么认为它需要这种额外的依赖?

我正在研究一些机器设置说明,我很惊讶地发现apt-get install AB行为与apt-get install A && apt-get install B

我的具体例子是A == openjdk-7-jdkB == ant

所以, openjdk-7-jdk依赖于openjdk-7-jre-headless ,它满足了ant的依赖java6-runtime-headless 。 但是如果你把它们安装为apt-get install openjdk-7-jdk ant ,那么APT似乎并没有想出来并安装default-jre-headless 。 但是如果你在安装ant之前安装openjdk-7-jdk ,它的依赖性就会得到满足并且一切都很好。

APT通常很聪明,可以解决这类问题,为什么在这种情况下不能这样做? 我想更好地了解它为什么会这样运作,所以这种事情在将来不再让我失望。

似乎这里有某种“重量”系统:

 $ 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 

正如您所看到的,由于复杂且错综复杂的建议,建议和依赖性, ant依赖于openjdk-7-jdk ,而在使用openjdk-6-jdk ,依赖性更直接:

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

当然,依赖解析的aptitude方法可能与apt-get不同。 顺便说一句,在没有安装openjdk-7-jdk的情况下运行ant的模拟不会拉开openjdk-6-jdk:

 $ 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]? 

也许如果你使用与我相同的方法,你可以想出更多,因为我现在正在使用Debian测试,同时存储库可能已经改变。

AFAIK,它具有满足依赖关系的默认值,因此如果在安装包之前未满足该依赖关系,则会安装依赖关系,然后安装所请求的包。

不过,这也可能只是一个大错误。

无论哪种方式,希望有所帮助。