Как избежать того, что плагин Gradle osgi генерирует запись export-package для частных пакетов и запись import-package для встроенных зависимостей

Уважаемые пользователи 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}"/
    }
}

Можно ли сделать это более чистым способом? В основном я хочу избежать двух вещей:

  1. необходимость вручную писать записи импорта и экспорта-пакета
  2. необходимость вручную копировать содержимое встроенных зависимостей (gson) в мою банку

Я думал, что bnd (лежащий в основе плагина osgi) может сделать это для меня, но с тем, что я пробовал до сих пор (даже если я добавлю их как частный пакет), bnd по-прежнему экспортирует все и импортирует пакет gson, а также не добавляет классы gson в банку


person Skifozoa    schedule 11.02.2017    source источник


Ответы (1)


Лучше использовать плагин Bnd Gradle. для OSGi. Он написан и поддерживается разработчиками bnd, которые кое-что знают об OSGi.

person Neil Bartlett    schedule 12.02.2017
comment
В вашем случае вам, вероятно, следует взглянуть на плагин Bnd Gradle для сборок вне рабочей области: biz.aQute.bnd.builder. github. com/bndtools/bnd/tree/master/ - person BJ Hargrave; 12.02.2017