Maven – Comment puis-je append une entrée de classpath arbitraire à un pot?

J’ai une situation inhabituelle où j’ai besoin d’append une entrée de classe classable (qui pointe vers un fichier jar) dans le manifeste d’un fichier jar exécutable. (Ceci est pour une application de bureau Swing.)

Le plug-in maven-jar génère l’entrée “Class-Path” pour le manifeste jar en utilisant les dépendances maven, et il ne semble y avoir aucun moyen d’append des entrées arbitraires.

J’ai également examiné le codage en dur de l’entrée de classe arbitraire dans le fichier de commandes qui démarre l’application, en utilisant le paramètre “-classpath“, mais je ne vois pas comment amener Maven à filtrer le classpath dans un fichier de commandes.

J’ai trouvé qu’il existe une solution simple à ce problème. Vous pouvez append un élément élément et définir true à l’élément . La valeur de l’élément est donc ajoutée automatiquement à class-path. Exemple:

  org.apache.maven.plugins maven-jar-plugin    true true your.main.Class   ../conf/     

Mise à jour: Voici comment filtrer un chemin de classe dans un manifeste personnalisé.

L’objective de build-classpath du plugin maven-dependency peut être configuré pour afficher le classpath dans un fichier au format de propriétés (c.-à-d. Classpath = [classpath]). Vous configurez ensuite l’élément filters pour utiliser le fichier classpath généré et configurez le répertoire de ressources à filtrer.

Par exemple:

    maven-dependency-plugin 2.1   generate-resources  build-classpath     true ${project.build.directory}/classpath.properties    maven-jar-plugin    ${project.build.outputDirectory}/META-INF/MANIFEST.MF       ${project.build.directory}/classpath.properties    src/main/resources true    

Ensuite, spécifiez ce qui suit dans src / main / resources / META-INF / Manifest.MF:

 Bundle-Version: 4.0.0 ... Classpath: ${classpath};[specify additional ensortinges here] 

Note: il y a un bogue avec ce traitement en utilisant le séparateur de chemin de fenêtre standard ( \ ), le chemin de génération est dépourvu de séparateurs (notez que cela fonctionne correctement sous Linux). Vous pouvez obtenir le \\\\ à générer correctement pour Windows en spécifiant \\\\ dans la configuration de l’objective build-classpath .


Vous pouvez personnaliser le manifeste dans la configuration du plug-in jar . Pour ce faire, vous appendiez quelque chose comme ça à votre pom.

  org.apache.maven.plugins maven-jar-plugin ...   true  true   development ${pom.url} value    ...  

La spécification complète de l’ archiveur offre plusieurs options. Voir la page d’exemples pour des options sur la configuration du classpath.

Si aucun de ces éléments ne vous convient, vous pouvez définir votre propre manifeste , définir des propriétés contenant les entrées requirejses et utiliser un filtre pour remplir le manifeste avec ces propriétés.

Essayez de le faire comme ils le font dans ce bogue, c’est-à-dire fusionner des entrées à l’aide de l’élément manifestEnsortinges / Class-Path

https://issues.apache.org/jira/browse/MJAR-41