Уважаемые пользователи StackOverflow.
У меня есть проект Gradle, из которого я хочу превратить артефакт в пакет osgi. В этом комплекте у меня есть:
- пакеты, которые я не хочу экспортировать (могут не отображаться в записи
Export-Package
манифеста) - зависимости, которые я хочу внедрить (могут не отображаться в записи
Import-Package
манифеста)
Немного повозившись, я придумал следующий файл 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) в мою банку
Я думал, что bnd (лежащий в основе плагина osgi) может сделать это для меня, но с тем, что я пробовал до сих пор (даже если я добавлю их как частный пакет), bnd по-прежнему экспортирует все и импортирует пакет gson, а также не добавляет классы gson в банку