Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用OSGi设置Maven多模块项目的反馈_Java_Maven_Osgi_Apache Felix_Bnd - Fatal编程技术网

Java 使用OSGi设置Maven多模块项目的反馈

Java 使用OSGi设置Maven多模块项目的反馈,java,maven,osgi,apache-felix,bnd,Java,Maven,Osgi,Apache Felix,Bnd,我正在与OSGi联系,并尝试使用ApacheFelix和Maven建立一个项目。我想使用多模块构建和声明性服务。该项目托管在GitHub上:(请注意,链接指向特定的提交,而不是存储库的头部。) 关于项目的整体设置,我有几个问题: 根据bnd-maven插件,最好使用而不是apachefelixbnd插件,因为它尊重maven的生命周期。从bnd maven插件的时代来看,这似乎是一种相对较新的方法,因此我不确定这样做是否是一个好主意 我正在使用ApacheFelix中的声明性服务包(org.a

我正在与OSGi联系,并尝试使用ApacheFelix和Maven建立一个项目。我想使用多模块构建和声明性服务。该项目托管在GitHub上:(请注意,链接指向特定的提交,而不是存储库的头部。)

关于项目的整体设置,我有几个问题:

  • 根据
    bnd-maven插件,最好使用
    而不是apachefelixbnd插件,因为它尊重maven的生命周期。从bnd maven插件的时代来看,这似乎是一种相对较新的方法,因此我不确定这样做是否是一个好主意

  • 我正在使用ApacheFelix中的声明性服务包(
    org.apache.felix.scr.annotations
    )来定义我的组件。
    maven scr插件使用这些注释来生成服务描述符,这些服务描述符包含在
    MANIFEST.MF
    中,使用
    bnd.bnd
    文件中的以下行:
    服务组件:OSGI-INF/*.xml
    。这就是声明性服务的使用方式吗

  • IntelliJ在
    GermanGreeter
    -类中显示警告:
    这到底意味着什么?我需要关心这个吗?我怎样才能修好它


虽然我对这个工作示例感到非常高兴,但我很好奇我是否按照预期的方式使用了所有这些技术,如果我能在开始在更大的项目中使用它之前获得一些关于整体设置的反馈,我将非常感激。

现在有一套官方的DS注释,在包
org.osgi.service.component.annotations
下。这些注释打包在jar“compendium”(org.osgi/cmpn)中,bnd有一个生成组件描述符的指令:
-dsannotations:


你问题的第一部分取决于意见
maven bundle插件
更“以maven为中心”:更容易将其集成到maven构建中
bnd maven插件更“以bnd为中心”:您可以操作标准bnd文件,但它打破了一些maven惯例。两者都有优点和不方便之处

我同意Jeremie的观点,即您应该使用标准化注释。它们可以与felix maven bundle插件以及bnd maven插件一起使用。有关第一个示例,请参见。因为第二个是很好的信息来源。您不应该需要scr插件


maven bundle插件非常稳定且易于使用。问题在于它重新定义了maven生命周期,这可能会导致某些项目设置出现问题。bnd maven插件需要在父级中使用更多的maven xml,但它的优势是它更适合复杂的构建,因为它不会调整maven。

感谢您对官方注释包的提示。关于bnd插件:不是正好相反吗?据我所知,bundle插件是否自己创建了一个jar,这实际上就是jar插件的工作。是的,maven bundle插件定义了一个新的打包和一个新的生命周期,但是这个打包不是强制性的(请参见“清单”目标)。bnd maven插件使用起来更简单,因为它不会改变生命周期/打包,但它缺少其他东西。例如,它的配置不遵循“maven方式”(单点配置-pom.xml),也不继承项目之间的配置(maven repo中的共享bnd文件)。双方都有赞成和反对者感谢您的澄清!在我的问题中,我已经阅读并引用了这篇博文。但是,如果我没有配置scr插件,则不会生成服务描述符,并且在部署捆绑包后服务也不会启动。您需要启用规范注释支持。对于maven bundle插件和bnd maven插件,您可以在bnd.bnd文件中使用“-dsannotations:*”执行此操作。就像杰里米解释的。。。当然,您需要使用spec注释。我的.bnd文件中已经有这一行了。所以,一旦我切换到官方注释,它就会工作?一旦我使用官方注释,服务描述符就会自动生成,谢谢!答案中的链接已断开。