为什么认为它需要这种额外的依赖?
我正在研究一些机器设置说明,我很惊讶地发现apt-get install AB
行为与apt-get install A && apt-get install B
。
我的具体例子是A == openjdk-7-jdk
和B == 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,它具有满足依赖关系的默认值,因此如果在安装包之前未满足该依赖关系,则会安装依赖关系,然后安装所请求的包。
不过,这也可能只是一个大错误。
无论哪种方式,希望有所帮助。