Java 使用不同的服务创建OSGi捆绑包
我们正在使用AdobeDayCQ进行部署。我们目前正在创建OSGi捆绑包,并在CQ中部署GET和使用maven捆绑包插件的所有服务 现在我们有了一个场景,我们不希望在发布实例中启用某些服务,但应该在Author中启用 有没有一种方法可以让我们使用相同的pom.xml管理两个捆绑包,一个用于author,一个用于author,另一个用于publish,这两个捆绑包在publish上都是必需的 或者有没有其他方法可以让我管理这件事。Java 使用不同的服务创建OSGi捆绑包,java,maven,osgi,maven-plugin,day-cq,Java,Maven,Osgi,Maven Plugin,Day Cq,我们正在使用AdobeDayCQ进行部署。我们目前正在创建OSGi捆绑包,并在CQ中部署GET和使用maven捆绑包插件的所有服务 现在我们有了一个场景,我们不希望在发布实例中启用某些服务,但应该在Author中启用 有没有一种方法可以让我们使用相同的pom.xml管理两个捆绑包,一个用于author,一个用于author,另一个用于publish,这两个捆绑包在publish上都是必需的 或者有没有其他方法可以让我管理这件事。 请在这方面帮助我。 我们现在正在使用它来创建捆绑包: <pl
请在这方面帮助我。 我们现在正在使用它来创建捆绑包:
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.0.1</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Import-Package>
org.osgi.framework,
*;resolution:=optional
</Import-Package>
<Export-Package>
com.abc.platform.enow.aem.core.testing.*,
com.abc.platform.enow.aem.core.utils.*,
com.abc.platform.enow.aem.core.viewhelper.*,
com.abc.platform.enow.aem.core.search.*
</Export-Package>
</instructions>
</configuration>
</plugin>
org.apache.felix
maven捆绑插件
2.0.1
真的
org.osgi.framework,
*;分辨率:=可选
com.abc.platform.enow.aem.core.testing.*,
com.abc.platform.enow.aem.core.utils.*,
com.abc.platform.enow.aem.core.viewhelper.*,
com.abc.platform.enow.aem.core.search*
有两种方法可以做到这一点。第一种方法更可取
通过组态选择激活
您可以通过使用基于运行模式的配置支持和使用声明性服务来管理服务注册来实现这一点
将您的服务绑定到配置
使用SCR注释将服务绑定到配置
import org.apache.felix.scr.annotations.Activate;
导入org.apache.felix.scr.annotations.Component;
导入org.apache.felix.scr.annotations.ConfigurationPolicy;
导入org.apache.felix.scr.annotations.Deactivate;
导入org.apache.felix.scr.annotations.Property;
导入org.apache.felix.scr.annotations.Service;
@组成部分(
name=FooImpl.SERVICE\u PID,
policy=ConfigurationPolicy.REQUIRE)
@服务
公共类FooImpl实现IFoo{
公共静态最终字符串服务\u PID=“com.foo.example”;
在上面的代码片段中,我们
- 注册一个实现
接口的服务IFoo
- 组件的
设置为ConfigurationPolicy
,即如果没有任何明确的配置,组件将无法激活和注册服务REQUIRE
- 配置的PID设置为
。如果省略它,则默认为类的完全限定名com.foo.example
- 在路径
/apps//config.author/com.foo.example
- 在上面的路径下,只需创建一个类型为
sling:OsgiConfig
- 当在任何CQ实例上部署包时,只有当运行模式设置为Author时,才会创建PID
的配置com.foo.example
- 只有当配置处于活动状态时,才会创建和注册
组件和服务FooImpl
import org.apache.felix.scr.annotations.Activate;
导入org.apache.felix.scr.annotations.Component;
导入org.apache.felix.scr.annotations.Deactivate;
导入org.apache.felix.scr.annotations.Reference;
@组成部分
公共类FooImpl实现IFoo{
@参考文献
私人吊索设置服务设置服务;
私人服务注册条例;
@激活
公共void激活(BundleContext,Map conf){
如果(settingsService.getRunModes()包含(“作者”)){
reg=context.registerService(IFoo.class.getName(),this,null);
}
}
@停用
私有无效停用(){
如果(reg!=null){
reg.unregister();
}
}
}
以上代码片段需要注意的几点
未使用FooImpl
标记进行注释。因此,SCR将仅激活组件,而不会注册任何服务@Service
- 在
方法中,我们使用activate
检查所需的运行模式。如果是SlingSettingsService
,我们通过编程注册服务author
- 稍后将在
停用
方法中删除服务实例
- 创建完整版本
- 在分发阶段,我们将jar(只需要在author上安装)推送到/apps/“project_name”/install.author文件夹
- 这里“author”是实例的运行模式
- 此jar部署到install.author文件夹中的author和publish,但仅在author模式下安装/反映
Vaibhav请在这方面帮助我…我在任何地方都找不到选项…嗨,Chetan,这是一个很好的帮助。我会尝试一下。你能告诉我是否有一种方法可以使用项目的pom.xml实现这一点,因为这将更容易,而不是对代码进行更改。