Java: Comment puis-je construire autonome distributions de Maven projets?
Je rencontre souvent des distributions des applications Java ou des bibliothèques qui
utiliser Maven comme leur outil de construction.
Certains d'entre eux, malheureusement, ne fournit pas autonome (ou redistribuable) bocaux.
Est-il possible de build Maven applications de telle sorte, que
le construire de résultats contient toutes les dépendances et peut être redistribué à travailler hors de la boîte?
J'ai essayé de construire Jackrabbit de l'OCM module.
Pour certains très "intelligent" raisons il n'est pas téléchargeable autonome
version.
Alors j'ai construit Jackrabbit avec Maven (le paquet source de Jackrabbit comprend
OCM), et a obtenu le même bocal, comme dans la apache référentiel.
Le pot n'est pas contiennent des dépendances nécessaires et est inutile pour moi.
maven.apache.org/plugins/maven-assembly-plugin/...
OriginalL'auteur ivan_ivanovich_ivanoff | 2009-06-18
Vous devez vous connecter pour publier un commentaire.
Utiliser le Maven Ombre plugin
...mais attention les pièges (similaire à celle décrite plus bas ma réponse), qui a obtenu une solution de contournement expliqué ici.
Aussi, être très prudent avec l'Ombre de configuration des plugins. J'ai utilisé accidentellement double
<configuration>
tags une fois, et les transformateurs ne s'applique pas à tous, et le plugin a également pris la liberté de ne pas me prévenir.N'utilisez pas le Maven Assembly plugin
assembly:single
va décompresser votre dépendance à Bocaux-est, et cela pourrait ne pas être ce que vous voulez. E. g. des trucs commeMETA-INF/spring.schemas
sera remplacé par le Printemps dernier, la dépendance JAR qui est évalué, et en tant que tel votre XSDs ne sera pas trouvé (à part ceux de la dernière POT, bien sûr). C'est pourquoi des systèmes comme Alfresco fait leur AMPLI plugin qui bundles dépendances à l'intérieur delib/
à l'intérieur de l'AMPLI que vous êtes en train de construire. Ce dernier soulève de gestion de la dépendance des questions, bien.OriginalL'auteur opyate
Vous pouvez avoir de la chance avec le appassembler plugin. À défaut, prendre un coup d'oeil à la assemblée plugin. Qui est plus souple, mais plus bas niveau. Si vous utilisez l'assemblée plugin, vous pouvez trouver le chapitre sur dans maven: the definitive guide être utile.
OriginalL'auteur Dominic Mitchell
Dominic dit, à l'aide de l'assemblée plugin fera l'affaire. Vous aurait généralement le configurer à l'intérieur de votre propre POM du projet afin de recueillir et de colis de toutes les dépendances nécessaires:
jar-with-dependencies
est prédéfini par l'assemblée plugin et comprendra toutes les dépendances dans l'emballage final (voir la documentation ici).Si vous ne souhaitez pas utiliser Maven pour votre propre projet, vous aurez besoin de modifier les bibliothèques, le Pdm et les reconditionner vous-même (télécharger les sources, ajouter l'extrait ci-dessus à pom.xml et exécuter
mvn package
). Méfiez-vous de dupliquer ou incompatible dépendances transitives si vous utilisez plusieurs bibliothèques.exclusions
pourrait aider dans ce cas (voir la documentation ici).OriginalL'auteur Nils Wloka
Comme un couple de posters dit, l'assemblée plugin est un bon moyen de créer une fichier jar, avec toutes les dépendances du projet. Cependant, vous n'avez pas à modifier l' pom.xml fichier. Exécutez simplement:
... afin de créer un fichier jar. Si vous voulez faire quelque chose de plus avancé, vous devrez probablement modifier pom.xml et créer un assembly personnalisé descripteur.
assembly:single
va décompresser votre dépendance à Bocaux-est, et cela pourrait ne pas être ce que vous voulez. E. g. des trucs commeMETA-INF/spring.schemas
sera remplacé par le Printemps dernier, la dépendance JAR qui est évalué, et en tant que tel votre XSDs ne sera pas trouvé (à part ceux de la dernière POT, bien sûr). C'est pourquoi des systèmes comme Alfresco fait leur AMPLI plugin qui bundles dépendances à l'intérieur delib/
à l'intérieur de l'AMPLI que vous êtes en train de construire. Ce dernier soulève de gestion de la dépendance des questions, bien.OriginalL'auteur reidarok
Changer le
pom.xml
fichier et utiliser la<Embed-Dependency>
directive. Un exemple similaire peut être trouvé ici de sorte que vous pouvez l'adapter à votre scénario.Je pense que cela devrait faire l'affaire.
Voici l'exemple à l'URL ci-dessus qui semble donner de délai d'attente.
Juste collé le document des commentaires en ligne dans la réponse. Espérons que cela aide.
Désolé, je suis totalement nouveau pour maven, et, honnêtement, je n'ai même pas envie d'aller plus profond en elle. Donc, je ne sais pas: 1) Dois-je modifier la principale pom.xml ou que l'un des module souhaité (qui je veux construire une redist package), 2) Le Bundle-Activator semble être quelque chose lié à votre projet, alors comment aurais-je le modifier pour le faire fonctionner? Le principal problème est: je suis de tout faire à distance si SSH, donc ma souplesse d'essayer les choses, est très limitée.
Cette solution semble être spécifique à la OSGi
OriginalL'auteur Jorge Ferreira
Je crois que le Maven Ombre Plugin saura répondre à vos besoins. Je l'utilise quand je suis bâtiment de l'interface de ligne de commande des outils pour créer un Uber POT, y compris mes classes et avec les classes de toutes mes dépendances.
Il est très facile à utiliser et je pense que ce exemple est auto-explicatif.
OriginalL'auteur Brian Matthews