Gradle:从OSGI依赖的MANIFEST.MF中正确构建类路径

时间:2015-04-01 10:25:31

标签: gradle osgi

我的gradle项目(“osgiapp”)依赖于OSGI项目(“osgidep”),该项目具有以下MANIFEST.MF条目:

Manifest-Version: 1.0
Export-Package: test.lib,test.osgidep
Bundle-ClassPath: lib/lib.jar,.
Bundle-Name: osgidep
Bundle-Version: 1.0
Bundle-SymbolicName: osgidep

这里导出两个包:

  • test.lib包由osgidep.jar中包含的lib / lib.jar提供
  • test.osgidep包由osgidep.jar本身提供

现在,我的build.gradle看起来像这样:

apply plugin: 'java'
apply plugin: 'osgi'

repositories {
    flatDir {
         dirs "../osgidep"
    }
}

dependencies {
    compile ":osgidep:"
}

当我尝试构建使用两个导出包的代码时:

package test.osgi;

import test.lib.Lib;
import test.osgidep.OsgiDep;

public class Test
{
    Lib lib = new Lib();
    OsgiDep dep = new OsgiDep();
}

我收到编译错误,指出test.lib包不存在。

如何根据依赖项的MANIFEST.MF条目告诉gradle生成正确的类路径?

1 个答案:

答案 0 :(得分:0)

您的问题是编译osgiapp所需的某些类型在osgidep的Bundle-Classpath中被“隐藏”。 javac对Bundle-Classpath一无所知。您需要在某处提取lib.jar,以便将其添加到osgiapp的编译依赖项中。如果您需要将bundle用作编译依赖项,那么像lib.jar这样的嵌入式jar就有问题。