2013-06-01 59 views
1

我有一个使用Gradle构建工具构建OSGi包的简单用例。如果构建路径中存在Java文件,则构建成功,否则失败。Gradle中的OSGi包构建问题

我在gradle脚本里面使用'osgi'插件,并试图在没有任何java文件的情况下构建。构建总是失败,以下错误:

无法MANIFEST.MF复制到

我相信一定是有办法做到这一点的摇篮,但不能罚款。任何想法可以做什么来解决这个取决于你的经验。

回答

0

--stacktrace运行表明osgi插件不与其中两个osgijava插件应用的情况下正确处理,但没有Java代码存在。删除java插件应该可以解决问题。

2

我今天也遇到过这个问题,@Peter的解决方案对我没有帮助(我没有在第一个地方应用java插件......)。然而,经过几个小时的谷歌搜索,我发现this thread,这帮助我找到了问题。

基本上,它似乎发生错误(as Peter stated)时,没有类文件的罐子被发现 - 我的猜测是因为该插件则无法扫描类,以此为基础的所有ImportExport信息包名。

我的解决办法是添加以下的清单规范:

classesDir = theSourceSet.output.classesDir 
classpath = theSourceSet.runtimeClasspath 

在我的实际构建代码,我遍历所有源设置为他们创造jar的任务,这样的话它看起来像这样:

sourceSets.each { ss -> 
    assemble.dependsOn task("jar${ss.name.capitalize()}", type: Jar, dependsOn: ss.getCompileTaskName('Java')) { 
     from ss.output 
     into 'classes' 

     manifest = osgiManifest { 
      classesDir = ss.output.classesDir 
      classpath = ss.runtimeClasspath 
      // Other properties, like name and symbolicName, also set based on 
      // the name of the source set 
     } 

     baseName = ss.name 
    } 
} 
0

当java代码出现时,我也有同样的问题。 添加这两行到osgiManifest闭合固定的问题:

classesDir = sourceSets.main.output.classesDir 
classpath = sourceSets.main.runtimeClasspath   

- 埃里克