Java 如何避免这种渐变';s osgi插件为私有包生成导出包条目,为嵌入式依赖项生成导入包条目

Java 如何避免这种渐变';s osgi插件为私有包生成导出包条目,为嵌入式依赖项生成导入包条目,java,gradle,osgi,bnd,Java,Gradle,Osgi,Bnd,亲爱的StackOverflow用户: 我有一个gradle项目,我想把这个工件变成一个osgi包。在这个捆绑包中,我有: 我不想导出的包(可能不会出现在清单的导出包条目中) 我要嵌入的依赖项(可能不会出现在清单的导入包条目中) 经过一点修改,我提出了以下gradle.build文件,它实现了我的意图,但可能不是以最干净的方式,利用了bnd group 'com.mycompany' version '1.0.0' apply plugin: 'java' apply plugin: 'o

亲爱的StackOverflow用户:

我有一个gradle项目,我想把这个工件变成一个osgi包。在这个捆绑包中,我有:

  • 我不想导出的包(可能不会出现在清单的
    导出包
    条目中)
  • 我要嵌入的依赖项(可能不会出现在清单的
    导入包
    条目中)
经过一点修改,我提出了以下
gradle.build
文件,它实现了我的意图,但可能不是以最干净的方式,利用了bnd

group 'com.mycompany'
version '1.0.0'

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

repositories {
    jcenter()
}

dependencies{
    compile 'org.osgi:org.osgi.framework:1.8.0'  //provided
    compile 'com.google.code.gson:gson:2.8.0'    //embedded
}


jar {
    //embedding the gson dependency
    from({
        def x = configurations.compile.find({
            return it.getName().contains('gson')
        })
        def tree = zipTree(x)
        return tree
    })

    //explicitly building manifest entries
    manifest {
        instruction 'Bundle-Vendor',
                'My Company'
        instruction 'Bundle-Activator',
                'com.mycompany.mybundle.Activator'
        instruction 'Import-Package',
                '!com.google.gson',           
                '*'
        instruction 'Export-Package',
                /com.mycompany.mybundle;version="${version}"/
    }
}
有没有可能以一种更干净的方式实现这一点?我主要想避免两件事:

  • 必须手动写入导入和导出包条目
  • 必须手动将嵌入式依赖项(gson)的内容复制到我的jar中

  • 我认为bnd(osgi插件的底层)可以为我做到这一点,但就我目前为止所做的尝试(即使我将它们作为私有包添加),bnd仍然会导出所有内容并导入gson包,而且它不会将gson类添加到jar中,因此最好使用for osgi。bnd的开发人员编写并支持它,他们对OSGi略知一二。

    您最好使用for OSGi。它是由bnd的开发者编写和支持的,他们对OSGi略知一二。

    在您的案例中,您可能应该看看用于非工作区构建的bnd Gradle插件:biz.aquete.bnd.builder。在您的例子中,您可能应该查看用于非工作区构建的Bnd Gradle插件:biz.aqte.Bnd.builder。