maven-scr-plugin 不生成 java 10 的 OSGI-INF 文件夹结构

maven-scr-plugin does not generate OSGI-INF folder structure with java 10

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

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

如果我将旧版本的 scr 插件 (1.7.4) 与 java 8.

一起使用,一切正常

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

[ERROR] 无法执行目标 org.apache.felix:maven-scr-plugin:1.7.4:scr (generate-scr-scrdescriptor) 项目 carbon-kernel: 执行生成- scr-scrdescriptor of goal org.apache.felix:maven-scr-plugin:1.7.4:scr failed: org.apache.felix.scrplugin.tags.annotation.AnnotationTagProvider 不是 ImageIO SPI class

当我将 maven scr 插件版本升级到 1.26.0(最新)时,它抱怨 "No annotation processors found in classpath"

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

现在我收到以下错误:

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

即使使用最新的 equinox 版本 (Photon),我也尝试过这个,它在 maven central repo 中不可用。

非常感谢任何帮助。

我可以让 maven scr 插件与 java 10 和 felix scr 注释一起工作,方法是修改 felix.scr.generator-1.1.4 库,它是 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();

AnnotationTagProviderManager class 之 felix.scr.generator-1.1.4

a similar issue 中所建议。

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

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

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

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

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

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