如何在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中创建这个项目的方式是:
- 创建新的"Bndtools OSGi项目">
- 右键单击,配置-转换为Maven项目
- 在包
com.myproj
中创建Activator.java
- 将
com.myproj
添加到专用包 - 将激活器设置为
com.Activator
这是我的bnd文件:
Bundle-Activator: com.myproj.Activator
Private-Package: com.myproj
我生成的jar是空的。有什么建议吗?
附言:这是我的eclipse项目(作为zip档案导出),以防它能揭示一些事情:https://dl.dropbox.com/u/9162958/scraper.zip
我的猜测是"转换为Maven项目"是问题所在。这可能已经将项目的Eclipse类路径从bnd默认bin文件夹更改为"target/classes"。你能确认它在不转换为maven的情况下工作吗?
bnd可以与bin文件夹的其他位置一起使用,您必须设置${bin}
属性(最好在cnf/build.bnd
中)。有一些关于如何将bndtools与maven一起使用的文章。bnd之所以不遵循Eclipse的设置,是因为没有Eclipse,它们就不可用,而bnd的设计目标是在任何地方构建:因此,bnd文件必须是信息的最终仲裁者。
无论如何,还有一个提示。。。activator不是构建OSGi构建的正确方法,因为它们是一个邪恶的单例。声明式服务要优越得多,我们在设计OSGi时实际上应该使用类似的机制。
我的设置:
- Eclipse Luna 4.4.0(20140612-600)
- Bndtools 2.3.0.REL-2014 0510-023245
以下是我如何使其工作的:
- 我下载了您导出的
scraper.zip
- 在Eclipse中创建并清空工作区
- 将您的项目从ZIP存档导入到空的工作区中
- 默认的
cnf
项目是自动创建的 - 默认情况下,
bnd
配置为使用已编译的*.class
文件的bin
目录,而Eclipse项目配置为使用target/classes
。因此,我不得不在cnf/build.bnd
中通过添加一行来更改此设置:
########################
## BND BUILD SETTINGS ##
########################
bin: target/classes
- 现在,在清理和重建项目后,
bnd
将创建包含Activator.class
的generated/scraper.jar
注意:
- 您也可以调整您的项目配置以使用
bin
目录而不是target/classes
,但我认为您稍后将使用Maven - 当使用
bndtools
时,当您从一个空的工作区开始并逐个导入项目时,它有时会有所帮助 - bndtools 2.4中有一个错误,如果每个项目有多个源目录,就会导致一些问题。因此,我仍然使用2.3版本