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.
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.
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
- [Gradle OSGi Plugin] (standard, intégré) ( https://docs.gradle.org/current/userguide/osgi_plugin.html ) ne donne que des manipulations manifestes, de sorte que GRADLE-1107" OSGi instruction
Include-Resource
ne fonctionne pas " est émission en cours depuis 2010 - Gradle Bundle Le Plugin vous permet de créer des paquets OSGI. Sa principale différence avec le Plugin Gradle OSGI est qu'il utilise l'outil bnd pour générer non seulement un manifeste mais un bocal entier.
-
osgi-run
"Osgi - Run-un plugin Gradle pour rendre le développement d'applications modulaires en utilisant OSGi complètement indolore"
maven
-
maven-bundle-plugin
alias Apache Felix Maven Bundle Plugin (BND) est "Maven première" approche -
bnd-maven-plugin
annonce et 2 plugins comparaison
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)