我有一个使用Gradle构建工具构建OSGi包的简单用例。如果构建路径中存在Java文件,则构建成功,否则失败。Gradle中的OSGi包构建问题
我在gradle脚本里面使用'osgi'插件,并试图在没有任何java文件的情况下构建。构建总是失败,以下错误:
无法MANIFEST.MF复制到
我相信一定是有办法做到这一点的摇篮,但不能罚款。任何想法可以做什么来解决这个取决于你的经验。
我有一个使用Gradle构建工具构建OSGi包的简单用例。如果构建路径中存在Java文件,则构建成功,否则失败。Gradle中的OSGi包构建问题
我在gradle脚本里面使用'osgi'插件,并试图在没有任何java文件的情况下构建。构建总是失败,以下错误:
无法MANIFEST.MF复制到
我相信一定是有办法做到这一点的摇篮,但不能罚款。任何想法可以做什么来解决这个取决于你的经验。
与--stacktrace
运行表明osgi
插件不与其中两个osgi
和java
插件应用的情况下正确处理,但没有Java代码存在。删除java
插件应该可以解决问题。
我今天也遇到过这个问题,@Peter的解决方案对我没有帮助(我没有在第一个地方应用java插件......)。然而,经过几个小时的谷歌搜索,我发现this thread,这帮助我找到了问题。
基本上,它似乎发生错误(as Peter stated)时,没有类文件的罐子被发现 - 我的猜测是因为该插件则无法扫描类,以此为基础的所有Import
和Export
信息包名。
我的解决办法是添加以下的清单规范:
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
}
}
当java代码出现时,我也有同样的问题。 添加这两行到osgiManifest闭合固定的问题:
classesDir = sourceSets.main.output.classesDir
classpath = sourceSets.main.runtimeClasspath
- 埃里克