使用Maven构建RPM时RHEL7出现OSGi依赖缺失错误求助
我之前也碰到过类似的跨RHEL版本构建差异的问题,这种情况通常和环境默认配置、插件版本或系统依赖的变化有关,给你几个具体的排查和解决方向:
检查并统一Maven RPM插件版本
RHEL7默认提供的maven-rpm-plugin版本大概率比RHEL6的要新,新版本插件可能会更严格地解析项目中的OSGi元数据(比如jar包中的MANIFEST.MF),从而自动添加这些OSGi依赖到RPM的requires列表里。你可以在POM中明确指定和RHEL6上一致的插件版本来验证:<build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>rpm-maven-plugin</artifactId> <version>你在RHEL6上使用的版本号</version> <!-- 其他配置 --> </plugin> </plugins> </build>排查依赖传递中的OSGi包
虽然你的POM里没有直接声明Eclipse相关依赖,但项目中的其他依赖可能间接引入了带有OSGi标识的jar包(比如某些第三方库是基于OSGi打包的)。你可以运行以下命令查看完整依赖树,定位引入这些Eclipse OSGi包的源头:mvn dependency:tree -Dverbose | grep "org.eclipse"如果找到对应的依赖,可以考虑用
<exclusions>排除掉不需要的OSGi模块,或者将其依赖范围设为provided(如果运行时不需要)。关闭RPM插件的自动依赖检测
新版本的maven-rpm-plugin默认可能开启了<autoRequires>true</autoRequires>配置,会自动扫描所有依赖的元数据生成RPM依赖。你可以在插件配置中关闭这个功能,或者手动指定需要的依赖:<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>rpm-maven-plugin</artifactId> <configuration> <autoRequires>false</autoRequires> <!-- 手动添加必要的依赖 --> <requires> <require>你的必要依赖1</require> <require>你的必要依赖2</require> </requires> </configuration> </plugin>如果你只是想忽略特定的OSGi依赖,也可以用
<excludedDependencies>精准排除:<excludedDependencies> <excludedDependency>osgi(org.eclipse.core.resources)</excludedDependency> <excludedDependency>osgi(org.eclipse.core.runtime)</excludedDependency> <!-- 其他需要排除的依赖 --> </excludedDependencies>安装RHEL7上缺失的系统OSGi包
如果这些OSGi依赖确实是运行时需要的,那可能是RHEL6默认预装了这些Eclipse相关的OSGi包,而RHEL7没有。你可以通过yum搜索对应的包并安装:yum search eclipse-core yum install eclipse-platform eclipse-core具体包名可能需要根据实际依赖调整,比如
org.eclipse.core.resources对应的RPM包通常包含在eclipse-platform或eclipse-core中。
内容的提问来源于stack exchange,提问作者Harsimranjit Singh Kler

