1

有人知道 maven scr 插件是否与 java 10 兼容?

我正在尝试使用 java 10 构建一个基于 equinox osgi 的软件平台,但我无法让 scr 插件在目标文件夹中生成 OSGI-INF 文件夹结构(其中包含 serviceComponents.xml)。结果 maven 捆绑插件抱怨它找不到 serviceComponents.xml 并且构建失败。

如果我在 java 8 中使用旧版本的 scr 插件(1.7.4),一切正常。

如果我尝试使用 java 10 构建它,则会发生以下错误。

[错误] 无法在项目 carbon-kernel 上执行目标 org.apache.felix:maven-scr-plugin:1.7.4:scr (generate-scr-scrdescriptor):执行目标 org.apache.felix 的 generate-scr-scrdescriptor :maven-scr-plugin:1.7.4:scr failed: org.apache.felix.scrplugin.tags.annotation.AnnotationTagProvider 不是 ImageIO SPI 类

当我将 maven scr 插件版本升级到 1.26.0(最新)时,它抱怨“在类路径中找不到注释处理器”

所以我根据Apache Felix Maven SCR Plugin Use中的说明添加了 org.apache.felix.scr.annotations 作为依赖 项

现在我收到以下错误:

[错误] 清单 org.wso2.carbon:org.wso2.carbon.registry.core:bundle:4.4.34-SNAPSHOT:输入文件不存在:target/scr-plugin-generated/OSGI-INF/serviceComponents.xml

即使使用 maven 中央仓库中不可用的最新Equinox 版本(Photon),我也已经尝试过。

任何帮助深表感谢。

4

1 回答 1

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();

AnnotationTagProviderManagerfelix.scr.generator-1.1.4 类中

正如在类似问题中所建议的那样。

并且还更新了 maven 编译器插件源和目标配置。现在使用修改后的 felix scr 生成器和 felix scr 插件生成 OSGI-INF 文件夹结构

这是我发现的一些事实-希望这会对某人有所帮助,

为了在 maven 构建期间自动生成 osgi 元数据 xml,可以使用以下任一注释模式。

  • Felix SCR 注释
  • OSGi 声明式服务 (DS) 注释

旧版本的 maven scr 插件使用了 felix scr 注释,但后来在文档中提到它已经开始支持来自 osgi 的 felix scr 注释和 DS 注释,这是用于生成 osgi 元数据 xml 的标准注释集。这是通过使用 scr 插件将相关依赖项添加到 pom 来完成的。但是较新版本的 scr 插件似乎不支持 felix scr 注释,我从社区发现 scr 插件处于维护模式,最好使用仅支持 osgi 的 maven bundle 插件(没有 scr 插件) ds 注释。

由于我正在升级的软件平台中使用了 felix scr 注释,因此我有 2 个选项可以继续。要么修复 scr 插件的旧版本(1.7.4)中的 java 10 兼容性问题,要么将现有的 scr 注释用法转换为 osgi ds 注释,这样我就可以避免使用 scr 插件。我决定尝试保留现有的注释模式会更好,因为更改它会影响那些将平台与自己的 osgi 包一起使用的人。

于 2018-09-05T04:27:29.923 回答