1

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

我在 gradle 脚本中使用“osgi”插件并尝试在没有任何 java 文件的情况下构建。构建总是失败并出现以下错误:

无法将 MANIFEST.MF 复制到

我确信在 Gradle 中必须有某种方法可以做到这一点,但不能很好。任何想法可以根据您的经验做​​些什么来解决这个问题。

4

3 回答 3

2

我今天也遇到了这个问题,@Peter 的修复对我不起作用(我一开始没有应用 java 插件......)。然而,经过几个小时的谷歌搜索,我确实找到了这个线程,这帮助我找到了问题。

基本上,当在 jar 中找不到类文件时,似乎会发生错误(如 Peter 所述) - 我的猜测是因为插件无法扫描类以获取所有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
    }
}
于 2013-06-17T16:08:58.913 回答
0

当存在 java 代码时,我也遇到了同样的问题。将这两行添加到 osgiManifest 闭包中解决了这个问题:

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

——埃里克

于 2014-02-27T13:31:02.660 回答
0

Running with--stacktrace表示osgi插件无法正确处理同时应用osgijava插件但不存在 Java 代码的情况。删除java插件应该可以解决问题。

于 2013-06-01T21:19:46.097 回答