Gradle中的OSGi捆绑包构建问题

Gradle中的OSGi捆绑包构建问题,gradle,blueprint-osgi,Gradle,Blueprint Osgi,我有一个使用Gradle构建工具构建OSGi包的简单用例。如果生成路径中存在java文件,则生成成功,否则将失败 我正在gradle脚本中使用“osgi”插件,并尝试在没有任何java文件的情况下进行构建。生成始终失败,并出现以下错误: 无法将MANIFEST.MF复制到 我相信在格拉德尔一定有办法做到这一点,但不可能做到。根据您的经验,您是否知道如何解决此问题。使用--stacktrace运行表明osgi插件无法正确处理同时应用osgi和java插件但不存在java代码的情况。删除java插件

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

我正在gradle脚本中使用“osgi”插件,并尝试在没有任何java文件的情况下进行构建。生成始终失败,并出现以下错误:

无法将MANIFEST.MF复制到


我相信在格拉德尔一定有办法做到这一点,但不可能做到。根据您的经验,您是否知道如何解决此问题。

使用
--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        
--埃里克