bndtools Activator捆绑

时间:2012-12-07 15:59:48

标签: osgi bnd bndtools

如何在bndtools中创建一个带有Activator的简单包? 它一直说:

The JAR is empty: The instructions for the JAR named com.myproj did not cause any content to be included, this is likely wrong  bnd.bnd /com.myproj Unknown Bndtools Problem Marker
Unused Private-Package instructions, no such package(s) on the class path: [com.myproj] bnd.bnd /com.myproj Unknown Bndtools Problem Marker

我在Eclipse中创建这个项目的方式是:

  1. 创建新的“Bndtools OSGi项目”
  2. 右键单击,配置 - 转换为Maven项目
  3. 在包Activator.java中创建com.myproj
  4. com.myproj添加到私有软件包
  5. 将激活器设置为com.Activator
  6. 这是我的bnd文件:

    Bundle-Activator: com.myproj.Activator
    Private-Package: com.myproj
    

    我生成的jar是空的。有什么提示吗?

    P.S。:这是我的eclipse项目(导出为zip-archive),以防它对事物有所了解:https://dl.dropbox.com/u/9162958/scraper.zip

2 个答案:

答案 0 :(得分:3)

我的猜测是“转换为Maven项目”是麻烦。这可能已将项目的Eclipse类路径从bnd default bin文件夹更改为“target / classes”。你可以确认它没有转换成maven吗?

bnd可以与bin文件夹的其他位置一起使用,您必须设置${bin}属性(最好在cnf/build.bnd中)。有一些文章如何使用mand的bndtools。 bnd不遵循Eclipse设置的原因是它们在没有Eclipse的情况下不可用,而bnd的设计目标是它在任何地方构建:因此bnd文件必须是信息的最终仲裁者。

无论如何,还有一个提示......激活器不是构建OSGi构建的正确方法,因为它们是一个邪恶的单例。声明性服务要优越得多,我们在设计OSGi时实际上应该使用类似的机制。

答案 1 :(得分:1)

我的设置:

  • Eclipse Luna 4.4.0(20140612-0600)
  • Bndtools 2.3.0.REL-20140510-023245

以下是我的工作原理:

  1. 我下载了您导出的scraper.zip
  2. 在Eclipse中创建并清空工作区。
  3. 将您的项目从ZIP存档导入空白工作区。
  4. 自动创建了默认的cnf项目。
  5. 默认情况下,bnd配置为在Eclipse项目配置为使用bin时将*.class目录用于已编译的target/classes文件。因此,我必须通过添加一行来更改cnf/build.bnd中的此设置:
  6. ########################
    ## BND BUILD SETTINGS ##
    ########################
    bin: target/classes
    
    1. 现在,在清理并重建项目后,bnd会创建包含generated/scraper.jar的{​​{1}}。
    2. 说明:

      • 您还可以调整项目配置以使用Activator.class目录而不是bin,但我假设您稍后将使用Maven。
      • 使用target/classes时,当您从一个空工作区开始并逐个导入项目时,它有时会有所帮助。
      • bndtools 2.4中存在一个错误,如果每个项目有多个源目录,则会导致一些问题。因此,我仍在使用版本2.3