我有一个java应用程序,我正在将其打包为RPM,它已经运行了一段时间,直到我推出了更新的java-1.7.0-oracle-devel包。
用于构建我的java-1.7.0-oracle-devel包的规范文件大致基于:https://github.com/puzzle/java-oracle-rpm/blob/master/java-1.7.0-oracle-devel.spec,它管理"备选方案",但与其他版本的java没有冲突语句。
该应用程序的要求是:
- 该包必须使用ant编译,使用java-1.6.0-openjdk-devel
- 编译后的包必须在java-1.7.0-oracle-devel下运行
我正在使用的ant包(通过BuildRequires指定)是来自基本repo的标准CentOS包,这需要java-devel>=0:1.5.0。java-1.6.0-openjdk-devel和java-1.7.0-oracle-devel都提供java-devel,因此它正在获取提供此功能的最新包。
我曾尝试在规范文件中指定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规范是否有能力以这种方式管理依赖项的依赖项?
我不相信RPM能够编码这样的(多个部分的)需求。
我相信你有两个选择。具体指定一个版本(即BuildRequires: java-devel = 1.6.0
),或者放弃最低版本规范(因为您假设在您的环境中会满足此要求),只包括BuildRequires: java-devel < 1.7.0
条目。