manifeste la première construction OSGi avec gradle-la migration de la fourmi à Gradle

est-il manifeste en premier http://wiki.osgi.org/wiki/Tooling_Approaches Gradle plugin pour OSGi? Ou comment faire avec gradle?

il y a un grand vieux projet pour le conteneur OSGi avec de nombreux projets ayant une relation compliquée déclarée dans le manifeste.MF. La compilation est longue. Maintenant, nous voulons simplifier les choses et adopter Gradle. Mais d'abord sans briser les choses et en gardant ant et Grad construit en parallèle pendant un certain temps. Cependant, ce que je vois, c'est gradle suggérant de définir manifeste à l'intérieur de build.gradle . https://docs.gradle.org/current/userguide/osgi_plugin.html

Que ferait beaucoup de travail exemplaire.

mise à jour il y a près de 100 modules avec beaucoup d'informations de dépendances entre les modules et pour les jar imbriqués. En moyenne manifeste.La longueur MF est d'environ 50 lignes (varie de 20 à 300 lignes). Comment emballer des pots emboîtés est autre question . Ce la question Est d'utiliser le manifeste existant.Fichiers MF. Tous les plugins que j'ai vu utilisent bnd qui est exactement contraire à la première approche manifeste.

26
demandé sur Community 2016-02-25 17:20:58

2 réponses

Grad a une classe OsgiManifest , qui est un jar manifeste étendu:

https://docs.gradle.org/current/javadoc/org/gradle/api/plugins/osgi/OsgiManifest.html

il y a un post sur StackOverflow qui montre un usage similaire:

comment ajouter des instructions D'Import-Package pour les dépendances d'exécution?

le bloc gradle correspondant ressemble à ceci:

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

jar {
    baseName = 'awesome'
    manifest {
        name = 'An Awesome Application'
        symbolicName = 'com.example.awesome'
        instruction 'Import-Package', 'org.springframework.orm', '*'
    }
}

si vous avez des manifestes existants et que vous souhaitez utiliser vos propres fichiers personnalisés, vous pouvez le faire en paramétrant l'emplacement du fichier de manifestes dans la fermeture jar:

jar {
    manifest {
        def manif = "${resourcesDir}/MANIFEST.MF"
        if (new File(manif).exists()) {
            from file(manif)
        }
        else{
            name = 'overwrittenSpecialOsgiName'
            instruction 'Private-Package', 'org.mycomp.somepackage'
            instruction 'Bundle-Vendor', 'MyCompany'
            instruction 'Bundle-Description', 'Platform2: Metrics' 
        }
    }
}

la documentation pour le manifeste de Gradle peut être trouvée ici: https://docs.gradle.org/current/javadoc/org/gradle/api/java/archives/Manifest.html

pour votre "autre question":

il existe des plugins Gradle supplémentaires pour la construction de faisceaux OSGI, dans certains cas, y compris des dépendances à partir d'autres faisceaux OSGI.

pour un exemple, il y a le Gradle Bundle Plugin , qui utilise l'outil bnd et vous permet de spécifier pour inclure les dépendances transitives et même exclure les indésirables. Par exemple:

jar {
    manifest {
        attributes 'Implementation-Title': 'Bundle Quickstart',     // Will be added to manifest
                     'Import-Package': '*'  // Will be overwritten by the instuctions below
    }
}

bundle {
    includeTransitiveDependencies = true

    instructions << [
        'Bundle-Activator': 'foo.bar.MyBundleActivator',
        'Import-Package': 'foo.*',
        '-sources': true
    ]

    instruction 'Export-Package', '*' // Specify an individual instruction
    instruction '-wab', ''
}

il y a aussi le Gradle OSGi-run plugin , qui inclut les dépendances transitoires par défaut:

dependencies {
    // all your usual dependencies
    ...

    osgiRuntime( "your:dependency:1.0" ) {
        transitive = false // transitive dependencies not included in OSGi runtime
    }
}

J'espère que c'est assez pour que tu y ailles.

9
répondu pczeus 2017-05-23 11:55:12

en date d'avril 2016 il n'y a pas D'approche manifeste en premier dans les outils de construction de Maven ou de Grad pour OSGi.

alors que pour les plugins Eclipse (qui sont aussi des paquets OSGi valides) il y a Maven/ Tycho build, qui est standard dans Eclipse Foundation, il n'est pas vraiment d'aide pour les projets OSGi généraux.

Contraire à Manifester-première se Manifeste de la génération, et il n'est qu'un outil bnd , qui au départ était pour manifest creation, puis est devenu full bundle jar builder et a maintenant BndTools Eclipse integration , qui ressemble à Maven/Gradle integration managing dependencies.

je recommande de conserver les instructions bnd dans le fichier standard externe bnd.bnd et de ne pas les placer dans le script de construction. Les fichiers *.bnd sont similaires aux fichiers .properties habituels de Java, donc dans Eclipse IDE clic droit, Ouvrir avec- > autre ... sélectionner Properties File Editor cochez " Utilisez cet éditeur pour.."et cochez" Utilisez cet éditeur pour tous*.nbd "fichiers"

For Gradle

maven

Tous les bnd outils maintenant recueillis sur http://bnd.bndtools.org/chapters/700-tools.html

il y a quelques exemples dans https://github.com/paulvi/OSGiBuildExamples

Note: lien http://wiki.osgi.org/wiki/Tooling_Approaches a été dans" le Wiki de la communauté OSGi a malheureusement été piraté et est actuellement indisponible. "pour plus d'une semaine, alors que cette question a été ouvert.

malheureusement @Richard a abandonné trop tôt pour recevoir quelques remerciements aussi bien (pour avoir mentionné maven)

3
répondu Paul Verest 2016-04-06 16:16:56