maven-scr-plugin不会使用Java 10

时间:2018-08-29 10:58:28

标签: maven osgi equinox java-10 maven-scr-plugin

有人知道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中央仓库中不可用。

非常感谢您的帮助。

1 个答案:

答案 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,可以使用以下两种注释模式之一。

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

较早版本的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捆绑软件的平台的人。