标签: bnd

私有包清单标题有什么作用?

我所熟悉的Import-PackageExport-Package,但是这对我来说是一个新的.它有什么作用?

java osgi bnd

13
推荐指数
3
解决办法
4616
查看次数

如何使用eclipse和bndtools将jar转换为OSGi包

我正在寻找一个循序渐进的指南,使用eclipse bndtools插件将jar转换为OSGi包.我知道可以使用命令行使用bnd来完成它,但很高兴知道如何通过IDE执行相同的操作.

我可能会遗漏一些东西,但本教程仅解释了如何从头开始创建项目.

java eclipse osgi bnd

11
推荐指数
2
解决办法
2万
查看次数

Maven Bundle插件:导出有私人参考

更新maven-bundle-plugin从版本2.3.5到版本2.4.0运行mvn clean install输出一些警告消息,我不完全理解.例如

Export ch.entwine.weblounge.contentrepository.impl.index, has 1, private references [org.elasticsearch.action.bulk]

我想这与嵌入式lib(elasticsearch)有关.以下是POM的部分内容:

<dependencies>
  ...
  <dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>0.19.9</version>
  </dependency>
  ...
</dependencies
...
<Export-Package>
  ...
  ch.entwine.weblounge.contentrepository.impl.index
  ...
</Export-Package>
<Embed-Dependency>
  ....
  elasticsearch;inline=true
  ...
</Embed-Dependency>
Run Code Online (Sandbox Code Playgroud)

错误消息到底意味着什么?解决此类问题的推荐方法是什么?

java osgi bnd maven-bundle-plugin

10
推荐指数
1
解决办法
4203
查看次数

在jenkins上持续部署基于OSGi的应用程序

花了几个小时,试图了解如何使后持续部署的工作在的情况下,基于OSGi的应用程序,我终于摆在我的计算器的第一个问题,希望对我可能做错了或漏掉某些适应症-不知何故我觉得自己走错了路......

这就是我想要实现的目标:

  1. 构建一些bundle并将它们安装到maven存储库(这里没问题,使用bnd)

  2. 现在让所有捆绑包组成我的应用程序(通过所有测试等),我想部署并运行应用程序,即使用这些捆绑包启动一些OSGi框架.

  3. 开始不是问题 - "mvn pax:provision -Dframework = equinox"可以解决问题.我的应用程序启动jetty,因此很容易通过浏览器验证看起来是否正常(除了所有测试)

  4. 但是,现在,尝试"连续",下次我想应用此过程时,我真的应该确保首先关闭我的应用程序的运行实例(至少释放正在使用的端口).所以,为了重新运行一切,我不得不首先关闭旧安装.

这就是我的问题开始的地方:有什么能帮我解决这个问题吗?我知道有maven-deploy-plugin,但这在将一些WAR/EAR文件部署到某个标准应用程序容器中时似乎很有用(似乎不需要重新启动它).

我真的只需要运行一些脚本来启动 OSGi环境 - 然后,下次再将它关闭,然后再重新启动它.使用tomcat,jetty,jboss等,有一些shutdown.sh脚本或mvn jetty:停止指令,但我真的必须自己写这些脚本吗?这是我认为我开始走错路的地方,有人必须在我面前遇到这些问题并解决它们我猜;)

我知道我可以以某种方式尝试使用JMX或使用telnet控制台访问正在运行的实例以发出"stop 0"命令,但这感觉不对.

从jenkins开始的进程应该编译/构建/部署项目,但是我猜不会启动长时间运行的线程,所以我不得不启动一些"外部"进程,我想在下次再次尝试时先杀死它.

有任何想法吗?也许我错过了什么?提前感谢您对此的任何意见!

osgi continuous-deployment pax-runner jenkins bnd

9
推荐指数
1
解决办法
5123
查看次数

在抽象类中提供DI方法

在大多数情况下,我有很多组件具有由OSGi声明服务注入的相同类.这些服务将用于执行某些逻辑,这些逻辑对于所有派生组件都是相同的.因此,为避免重复代码,最好使用抽象类.是否有可能将DI引用方法(set/unset)移动到抽象类.我正在使用Bnd.

例如:

@Component 
public class B implements IA {
   private ServiceC sc;

   @Reference
   public void setServiceC(ServiceC sc) {
      this.sc = sc;
   }  

   public void execute() {
      String result = executeSomethingDependendOnServiceC();

      // do something with result
   }

   protected String executeSomethingDependendOnServiceC() {
      // execute some logic
   }     
}

@Component 
public class D implements IA {
   private ServiceC sc;

   @Reference
   public void setServiceC(ServiceC sc) {
      this.sc = sc;
   } 

   public void execute() {
      String result = executeSomethingDependendOnServiceC();

      // do something different with result …
Run Code Online (Sandbox Code Playgroud)

java osgi bnd

9
推荐指数
1
解决办法
1716
查看次数

如何从osgi中的字节反序列化对象

在我的osgi应用程序中,我有三个包travel.api,table.apiutils.travel.api取决于table.api哪个取决于utils.注意,travel.api不直接依赖utils.我使用aQute Bnd来生成清单,我相信它工作正常.清单如下所示.

有一个叫做类PageData的字段TableData,它有一个类型的字段,而这个字段又有一个类型的字段TestObject.PageData坐落于travel.api,TableData位于table.api以及TestObject位于utils.加载包时,这一切都正常.当我收到表示PageData对象的字节数组时,问题出现了.我必须在travel.api捆绑中反序列化它.这应该不是问题,因为它是定义的地方.我使用org.jboss.netty.handler.codec.serialization.ObjectDecoderInputStream并从travel.apibundle中传入类加载器.抛出以下异常,但基本上它说:

Caused by: java.lang.ClassNotFoundException: com.openaf.utils.TestObject not 
    found by travel.api [9].
Run Code Online (Sandbox Code Playgroud)

现在,这是有道理的,因为如果你看Import-Packagetravel.api,你会看到com.openaf.utils(其中TestObject位于)未列出.如果我添加此包,则正确反序列化.但是,这似乎不是一个好的通用解决方案,因为我必须遍历每个PageData使用的字段并确保它们都在此模块中导入,并递归地在这些字段包含的每个字段等.

我在这里做错了吗?

使用OSGi时反对对象反序列化的最佳方法是什么?

如果我正确地做了并且我必须指定所有"深度"导入,有没有办法让Bnd进行"深度"生成?

任何帮助将不胜感激!

我正在使用felix v4作为我的osgi库.

Manifest-Version: 1
Bnd-LastModified: 1355404320862
Bundle-ManifestVersion: 2
Bundle-Name: travel.api
Bundle-SymbolicName: …
Run Code Online (Sandbox Code Playgroud)

java osgi apache-felix bnd

9
推荐指数
1
解决办法
2198
查看次数

如何使用 bnd/maven-bundle-plugin 从 jar 依赖项将资源文件包含到 osgi 包中?

我正在使用maven-bundle-pluginbnd有效)。

从源中包含资源文件很简单。

例如,在构建期间将资源文件 ( src/main/resources/some.xml) 移动到target目录 ( target/classes/some.xml)下,可以使用以下<Include-Resource>指令将其包含到包中:

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>3.0.1</version>
    <extensions>true</extensions>
    <configuration>
        <instructions>
            <Include-Resource>
                some.xml=target/classes/some.xml,
            </Include-Resource>
        </instructions>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

让我们有一个依赖:

<dependency>
    <groupId>com.example</groupId>
    <artifactId>library</artifactId>
    <version>1.0.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

如何在依赖中引用资源文件jar

换句话说,如何

所以来自依赖项之一的资源出现在输出包中jar

osgi bnd maven-bundle-plugin osgi-bundle

8
推荐指数
1
解决办法
8969
查看次数

使用BND嵌入第三方JAR

我有一个使用ANT和经典BND工具构建的OSGi包.我的bundle在内部使用了一个库(JAR),它在我的OSGi容器(Apache Felix)中不能作为一个包使用.所以,我试图将它嵌入我的包中,以便在运行时访问.

如何使用ANT + BND嵌入这样的库/ JAR?(注意:我不能使用MAVEN,使用它可能会容易得多)

ant osgi apache-felix bnd

7
推荐指数
1
解决办法
2891
查看次数

如何OSGIfy图书馆

我正在开发一个项目,它是集成项目,我们正在使用Apache Camel和Apache Karaf.在项目中,我需要使用Jira REST Java客户端库.

所以我已经阅读了很多关于如何将非OSGI库包装到OSGI包中的各种文章和线程,但我真的不确定我是否做对了.

所以,我创建了一个POM文件,它依赖于所需的库.制作了一个包并试图将它部署到卡拉夫,当然,卡拉夫抱怨丢失包裹.

所以,我发现了相应的maven依赖,添加它,包进入<Import-Package>和依赖<Embed-Dependency>.

另一轮,部署,找到依赖,添加,再次,再次,直到Karaf与捆绑很好.

这是真的正确吗?在我看来,我觉得很疯狂,所以我想我不会因为usualy :)

最后,包裹变得稳定在我的工作计算机上,我快速检查并回家了,我继续但是,奇怪的是,在我的个人计算机上编译的相同的POM /包不起作用,再次抱怨丢失包裹,但是这次,这个软件包肯定是在POM文件中,并且肯定它是嵌入在包中的,我可以在那里看到它.

这次丢失的包是org.apache.commons.codec.

org.osgi.framework.BundleException: Unresolved constraint in bundle jiraclient.bundle [134]: Unable to     resolve 134.0: missing requirement [134.0] osgi.wiring.package; (osgi.wiring.package=org.apache.commons.codec)
    at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3826)[org.apache.felix.framework-4.0.3.jar:]
    at org.apache.felix.framework.Felix.startBundle(Felix.java:1868)[org.apache.felix.framework-4.0.3.jar:]
    at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:944)[org.apache.felix.framework-4.0.3.jar:]
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundle(DirectoryWatcher.java:1247)[6:org.apache.felix.fileinstall:3.2.6]
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundles(DirectoryWatcher.java:1219)[6:org.apache.felix.fileinstall:3.2.6]
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.startAllBundles(DirectoryWatcher.java:1208)[6:org.apache.felix.fileinstall:3.2.6]
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:503)[6:org.apache.felix.fileinstall:3.2.6]
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:291)[6:org.apache.felix.fileinstall:3.2.6]
Run Code Online (Sandbox Code Playgroud)

所以,现在我完全糊涂了,出了什么问题:(

很高兴,伙计们,帮助我.谢谢!

POM文件很长,所以我想链接更好:http://pastebin.com/j5cmWveG

osgi apache-camel maven bnd

7
推荐指数
1
解决办法
2945
查看次数

在bndtools中,是什么原因导致生成执行环境的Require-Capability标头?

我有以下的bnd文件:

Bundle-Version: 1.0.12
Bundle-Activator: a.b.Activator
Private-Package: a.b
-buildpath: osgi.core;version=4.3.0,\
    org.apache.felix.bundlerepository;version=1.6.6,\
    osgi.cmpn;version=4.3.0.201111022214
-sources: false
Run Code Online (Sandbox Code Playgroud)

在生成的MANIFEST.MF中:

Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.6))"
Run Code Online (Sandbox Code Playgroud)

我不希望这个......我没有理由看到它应该是.那么我该如何避免呢?

osgi bnd bndtools

6
推荐指数
1
解决办法
2524
查看次数