Как избежать того, чтобы плагин Gradle osgi генерировал запись export-pacakge для приватных пакетов и запись import-пакета для встроенных зависимостей
Уважаемые пользователи Stackru
У меня есть проект 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, а также не добавляет классы гсон к банке
1 ответ
Вам лучше использовать плагин Bnd Gradle для OSGi. Он написан и поддерживается разработчиками bnd, которые знают кое-что об OSGi.