RPM - 管理依赖项的依赖项

时间:2014-10-20 16:25:43

标签: java ant packaging rpm

我有一个java应用程序,我将其打包为RPM,它已经运行了一段时间,直到我推出了更新的java-1.7.0-oracle-devel软件包。

用于构建我的java-1.7.0-oracle-devel包的spec文件基于:https://github.com/puzzle/java-oracle-rpm/blob/master/java-1.7.0-oracle-devel.spec,它管理'alternative'但与其他版本的java没有冲突声明。

该应用程序的要求是:

  • 必须使用java编译包,使用java-1.6.0-openjdk-devel
  • 编译的软件包必须在java-1.7.0-oracle-devel
  • 下运行

我正在使用的ant包(通过BuildRequires指定)是基础仓库中的标准CentOS包,这需要java-devel> = 0:1.5.0。 java-1.6.0-openjdk-devel和java-1.7.0-oracle-devel都提供java-devel,因此它抓住了提供此功能的最新软件包。

我已经尝试在spec文件中指定java-devel它需要的java-devel 1.7.0,但这不起作用 - 构建过程仍然在java-1.6.0-openjdk-devel中引入和java-1.7.0-oracle-devel(作为ant的依赖)。

BuildRequires:  java-devel >= 1.6.0
BuildRequires:  java-devel < 1.7.0

我有一个解决方法,因为我使用mock我可以简单地禁用包含java-1.7.0-oracle-devel的repo,但我希望能够在RPM规范中实现这一点,如果可能的话:我希望能够说明'java-devel'是由java-1.6.0-openjdk-devel提供的。

RPM规范是否有能力以这种方式管理依赖项的依赖关系?

1 个答案:

答案 0 :(得分:0)

我不相信RPM能够编码(多个部分)的需求。

我相信你有两个选择。指定一个特定版本(即BuildRequires: java-devel = 1.6.0)或删除最低版本规范(因为您假设在您的环境中将满足)并且仅包含BuildRequires: java-devel < 1.7.0条目。