【问题标题】:Gradle: Properly build classpath from OSGI dependency's MANIFEST.MFGradle:从 OSGI 依赖项的 MANIFEST.MF 正确构建类路径
【发布时间】:2015-06-05 22:58:20
【问题描述】:

我的 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 包不存在。

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

【问题讨论】:

    标签: gradle osgi


    【解决方案1】:

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

    【讨论】:

    • 没错。我正在寻找的是在使用 gradle 时设置类路径的一些自动化方法——类似于 Eclipse 对 PDE 所做的魔法。
    • 我认为 PDE 也不处理 Bundle-Classpath。
    • 我遇到了完全相同的问题,如下所述:stackoverflow.com/questions/69448573/… 当您在 Eclipse 中编译(这是 JDT / PDE 吗?)并添加“org.eclipse.pde.build”然后添加“pdebuild.考虑在“Bundle-Classpath”中引用的jar”。
    猜你喜欢
    • 2014-05-19
    • 2018-04-06
    • 2011-10-29
    • 1970-01-01
    • 2017-02-22
    • 2016-05-04
    • 2019-01-24
    • 2013-01-30
    • 1970-01-01
    相关资源
    最近更新 更多