有人知道maven scr插件是否与Java 10兼容吗?
我正在尝试使用Java 10构建基于Equinox osgi的软件平台,但我无法获取scr插件来在目标文件夹中生成OSGI-INF文件夹结构(包含serviceComponents.xml)。 结果,maven捆绑插件抱怨找不到serviceComponents.xml,并且构建失败。
如果我将旧版本的scr插件(1.7.4)与Java 8配合使用,则一切正常。
如果我尝试使用Java 10构建它,则会发生以下错误。
[错误]无法在项目Carbon内核上执行目标org.apache.felix:maven-scr-plugin:1.7.4:scr(generate-scr-scrdescriptor):执行以下项目的generate-scr-scrdescriptor:目标org.apache.felix:maven-scr-plugin:1.7.4:scr失败:org.apache.felix.scrplugin.tags.annotation.AnnotationTagProvider不是ImageIO SPI类
当我将maven scr插件版本升级到1.26.0(最新)时,它抱怨“在类路径中找不到注释处理器”
因此,我根据中的说明添加了org.apache.felix.scr.annotations作为依赖项 Apache Felix Maven SCR Plugin Use
现在我遇到以下错误:
[错误]清单org.wso2.carbon:org.wso2.carbon.registry.core:bundle:4.4.34-SNAPSHOT:输入文件不存在:target / scr-plugin-generated / OSGI- INF / serviceComponents.xml
即使在最新的Equinox版本(Photon)中也尝试过此操作,而该版本在maven中央仓库中不可用。
非常感谢您的帮助。
答案 0 :(得分:1)
我可以通过修改felix.scr.generator-1.1.4库来使maven scr插件与Java 10和felix scr注释一起使用,该库是maven scr插件版本1.7.4的依赖项(与我在问题中提到的Java 8)
我替换了
final Iterator<AnnotationTagProvider> serviceIter = ServiceRegistry.lookupProviders(AnnotationTagProvider.class, classLoader);
与
final Iterator<AnnotationTagProvider> serviceIter = ServiceLoader.load(AnnotationTagProvider.class, classLoader).iterator();
在felix.scr.generator-1.1.4的AnnotationTagProviderManager
类中
如a similar issue中的建议。
并更新了Maven编译器插件的源和目标配置。现在,通过修改后的felix scr生成器和felix scr插件可以生成OSGI-INF文件夹结构
我发现了一些事实-希望这对某人有帮助,
为了在Maven构建期间自动生成osgi元数据xml,可以使用以下两种注释模式之一。
较早版本的maven scr插件已使用felix scr批注,但稍后在文档中提及它已开始支持osgi的felix scr批注和DS批注,这是用于生成osgi元数据xml的标准批注。 。这是通过使用scr插件将相关的依赖项添加到pom来完成的。但是,较新版本的scr插件似乎不支持felix scr批注,而我从社区中发现,scr插件处于维护模式,最好使用仅支持osgi的maven捆绑插件(不带scr插件) ds注释。
由于我正在升级的软件平台中使用了felix scr批注,因此我有2个选项可以继续。要解决旧版本(1.7.4)的scr插件中的java 10兼容性问题,或者将现有的scr注释用法转换为osgi ds注释,以便可以避免使用scr插件。我决定最好尝试保留现有的注释架构,因为对其进行更改会影响那些使用带有自己的osgi捆绑软件的平台的人。