考虑一个提供相同功能的不同rpm的情况。一个假设的例子是让Oracle JDK rpm、Oracle JRE rpm和OpenJDK rpm在它们的SPEC文件的"提供"字段中都列出了"java-env"。现在,像ant、groovy、maven这样的rpm都在它们的SPEC文件中将"Requires"字段设置为"java-env"。当尝试安装groovy或maven时,会安装什么?我们可以通过什么方式控制安装哪些依赖?我认为一种方法是将Oracle JDK rpm, Oracle JRE rpm和OpenJDK都放在不同的存储库中,并在存储库中设置优先级,但这样一来,repos的数量可能会继续增长,因为我有几个这样的冲突。
如果多个包提供相同的功能,那么每个包都可以安装。这主要是用户选择。当包被正确地完成后,应该可以安装它们中的每一个(一次只安装一个)。
需要环境的包甚至不会注意到安装或使用的是哪一个。
在没有用户交互的情况下安装哪个包取决于包管理器。有的问用户,有的选择自己喜欢的,…
如果您需要一个特殊的Java版本,那么您应该要求特定的包而不是通用的包。这里的问题是,另一个包可能需要另一个包,然后你就有了一个无法解决的冲突。所以最好总是使用通用的Requires
。
对于大多数系统,也可以安装多个java包。然后安装过程选择最好的作为默认值(通过/etc/alternatives
机制)。