Gradle中的OSGi捆绑包构建问题
我有一个使用Gradle构建工具构建OSGi包的简单用例。如果生成路径中存在java文件,则生成成功,否则将失败 我正在gradle脚本中使用“osgi”插件,并尝试在没有任何java文件的情况下进行构建。生成始终失败,并出现以下错误: 无法将MANIFEST.MF复制到Gradle中的OSGi捆绑包构建问题,gradle,blueprint-osgi,Gradle,Blueprint Osgi,我有一个使用Gradle构建工具构建OSGi包的简单用例。如果生成路径中存在java文件,则生成成功,否则将失败 我正在gradle脚本中使用“osgi”插件,并尝试在没有任何java文件的情况下进行构建。生成始终失败,并出现以下错误: 无法将MANIFEST.MF复制到 我相信在格拉德尔一定有办法做到这一点,但不可能做到。根据您的经验,您是否知道如何解决此问题。使用--stacktrace运行表明osgi插件无法正确处理同时应用osgi和java插件但不存在java代码的情况。删除java插件
我相信在格拉德尔一定有办法做到这一点,但不可能做到。根据您的经验,您是否知道如何解决此问题。使用
--stacktrace
运行表明osgi
插件无法正确处理同时应用osgi
和java
插件但不存在java代码的情况。删除java
插件应该可以解决问题。我今天也遇到了这个问题,@Peter的修复对我不起作用(我一开始没有应用java插件…)。然而,经过数小时的谷歌搜索,我确实找到了问题所在,这帮助我找到了问题所在
基本上,当jar中找不到类文件时,似乎会出现错误()——我猜是因为插件无法扫描类以查找所有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
--埃里克