Java 如何避免这种渐变';s osgi插件为私有包生成导出包条目,为嵌入式依赖项生成导入包条目
亲爱的StackOverflow用户: 我有一个gradle项目,我想把这个工件变成一个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
- 我不想导出的包(可能不会出现在清单的
条目中)导出包
- 我要嵌入的依赖项(可能不会出现在清单的
条目中)导入包
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}"/
}
}
有没有可能以一种更干净的方式实现这一点?我主要想避免两件事:
我认为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。