当前位置: 首页 > 知识库问答 >
问题:

maven scr插件不使用java 10生成OSGI-INF文件夹结构

公羊宗清
2023-03-14

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

我试图用java 10构建一个基于Equinox osgi的软件平台,我无法使用scr插件在目标文件夹中生成OSGI-INF文件夹结构(其中包含serviceComponents.xml)。

如果我在Java8中使用旧版本的scr插件(1.7.4),一切都可以正常工作。

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

[错误]无法执行目标组织。阿帕奇。felix:maven scr插件:1.7.4:scr(生成scr scredscriptor)在project carbon内核上:执行生成scr scredscriptor的目标组织。阿帕奇。felix:maven scr插件:1.7.4:scr失败:org。阿帕奇。菲利克斯。斯克普卢金。标签。注释。AnnotationTagProvider不是ImageIO SPI类

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

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

现在我得到以下错误:

[错误]清单组织。wso2。碳:org。wso2。碳注册处。核心:bundle:4.4.34-SNAPSHOT:输入文件不存在:target/scr-plugin-generated/OSGI-INF/serviceComponents。xml

即使是最新的equinox版本(光子版),我也尝试过这一点,这在maven central repo中是不可用的。

非常感谢您的帮助。

共有1个答案

宋涵衍
2023-03-14

我可以得到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();

在felix的AnnotationTagProviderManager类中。scr。发电机-1.1.4

正如在一篇类似的文章中所暗示的那样。

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

以下是我发现的一些事实——希望这能帮助一些人,

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

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

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

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

 类似资料:
  • OSGI-INF/serviceComponent.xml可以使用maven scr felix插件通过添加依赖项生成,如 但对于格雷德尔来说,我无法生成。。我已尝试添加 这是一个错误。捷豹路虎主页。找不到gradle。 我做错了什么??? 基本上,我需要依赖项来添加gradle以生成servicecomponent。xml

  • 我正在使用openapi生成器从JsonSchema生成POJO。在我的pom中。xml,我已指定 <代码> 这将在中生成所有文件: 生成的源代码:OpenAPI/src/main/java/com.test.generated.model 我有基于不同模式的冲突类名,这导致了错误。 是否有办法在单独的文件夹中为每个架构单独自动生成?

  • 我尝试用maven (mvn包)生成一个. zip文件,并希望在zip中也有一个清单文件。jar文件本身确实可以工作。我试图用maven jar插件生成一个清单文件,但它不起作用。我需要做些别的事情来得到一个清单文件吗,或者使用这个插件就足够了?父pom(我展示的父POM的父POM)有maven汇编插件。(我对maven完全陌生) pom.xml父 pom 的文件: pom。模块的xml文件:

  • 我想编写一个服务,同时保持项目的文件结构整洁。但是Docker似乎在构建上下文之外的路径上有问题。我正在创建一个包,并想将所有与Docker相关的东西保存在项目根目录下的文件夹中。但是我找不到从和引用项目文件的方法。创建容器时,必须复制项目中的文件。 这是我目前的项目结构: 现在,如果我和,我尝试了两种可能性。要么我的Dockerfile使用,要么撰写文件具有构建指令,例如: 第一种方法不起作用。

  • 我正在研究将现有的OSGI/blueprint项目从Maven迁移到Gradle。在Maven中,Maven bundle插件会扫描上下文XML文件,以查找代码中可能不会出现的导入,但是我无法将其与Gradle OSGI插件一起使用。 例如,蓝图XML包含这样的导入 使用POM中的指令与maven-bundle-plugin... 然后生成MANFEST。MF将包含这样的导入 但是,使用以下bui

  • 我在AS中有一个带有本机库的项目。我正在尝试使用实验插件(gradle实验:0.6.0-alpha5)来获取. so文件(稍后在System.loadLibrary()中使用它)。但是我不能生成它们。我真的不明白,为什么? 我用这个指令编写了build.gradle。这是: 尝试运行应用程序时出现的错误: java.lang.无法从加载器加载ImageProcdalvik.system.PathC