【发布时间】:2014-10-20 16:25:43
【问题描述】:
我有一个 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 指定)是来自基本存储库的标准 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 规范是否有能力以这种方式管理依赖项的依赖关系?
【问题讨论】: