1

如何在 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

这是我的 bnd 文件:

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

我生成的 jar 是空的。有小费吗?

PS:这是我的 Eclipse 项目(导出为 zip 存档),以防它对事物有所启发:https ://dl.dropbox.com/u/9162958/scraper.zip

4

2 回答 2

3

我的猜测是“转换为 Maven 项目”是个麻烦。这可能已将项目的 Eclipse 类路径从 bnd 默认 bin 文件夹更改为“target/classes”。您能否确认它可以在不转换为 Maven 的情况下工作?

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

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

于 2012-12-08T09:54:48.447 回答
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配置为使用bin编译*.class文件的目录,而您的 Eclipse 项目配置为使用target/classes. cnf/build.bnd因此,我必须通过添加一行来更改此设置:
########################
## BND BUILD SETTINGS ##
########################
bin: target/classes
  1. 现在,在清理和重建项目之后,bnd创建generated/scraper.jar包含您的Activator.class.

笔记:

  • 您也可以调整您的项目配置以使用bin目录而不是,target/classes但我假设您稍后将使用 Maven。
  • 使用bndtools时,当您从一个空的工作区开始并逐个导入项目时,它有时会有所帮助。
  • 如果每个项目有多个源目录,bndtools 2.4 中有一个错误会导致一些问题。因此,我仍在使用 2.3 版
于 2014-11-13T10:57:46.137 回答