Je dois manquer quelque chose. J'ai cherché et cherché, et j'ai joué et bricolé, et je ne pouvais toujours pas comprendre comment faire ce qui suit avec Maven: p>
Je voudrais télécharger un artefact et toutes ses dépendances (et dépendances transitives), à partir de notre serveur Nexus interne, dans un emplacement spécifié par l'utilisateur. L'idée ici est de permettre à la personne qui déploie la solution dans la production d'une manière qu'ils peuvent facilement obtenir tous les fichiers JAR dont ils ont besoin au même endroit. P>
Il y a dépend de la dépendance: obtenir, et ceci est proche-mais-no-cigare. Avec une dépendance: Obtenez, tous les artefacts sont téléchargés dans le référentiel MVN local, sous Annuaire conformément à l'élevage et à l'artefactide de chaque artefact. Ce n'est pas ce que je veux, car vous devez alors faire voler tout autour de tous ces répertoires pour obtenir aux pots. Je souhaite que tous les fichiers téléchargés sur un répertoire pour qu'ils soient au même endroit. P>
Il y a une dépendance: dépendances de copie. Cela fait à nouveau presque ce que je veux; Il copie tous les représentants de l'artefact dans la cible / la dépendance. Les deux problèmes avec ceci sont 1) Vous devez avoir un pom.xml; Vous ne pouvez pas spécifier des coordonnées arbitraires telles que vous le pouvez avec la dépendance: obtenir et 2) dépendances: les dépendances de copie ne copient pas l'artefact principal en cible / dépendances. P>
Il doit y avoir une meilleure façon de le faire, mais je ne peux pas comprendre où chercher une solution. Pour résumer, je veux être capable de donner à quelqu'un un ensemble de coordonnées Maven (Gremblement: Artifactide: Version) et notre URL Nexus interne, et faites-leur télécharger tout avec une commande dans un répertoire de leur choix. P>
3 Réponses :
Si vous "voulez donner à quelqu'un un ensemble de coordonnées Maven", il serait préférable de les mettre dans un pom.xml spécial (vous devez les écrire n'importe où). Ce POM n'est pas le POM de votre "artefact principal" mais a le "artefact principal" comme dépendance. Le type d'emballage peut être Utilisez ensuite la dépendance pom code> car ce projet ne créera aucun artifcat lui-même. P>
: dépendances de copie code> Solution que vous avez déjà évaluée et que vous obtiendrez toutes les dépendances dont vous avez besoin. Imho une solution élégante et simple. Je ne sais pas mieux. P>
Utilisez le plug-in Maven Assembly pour emballer un "jar avec des dépendances" supplémentaire dans un fichier zip qui inclut tout.
http://maven.apache.org/plugins/maven-assembly-plugin/descriptor-refs.html p> Ensuite, l'utilisateur peut simplement demander
+1 - J'ai utilisé le plugin de montage moi-même pour emballer le pot de mon projet avec ses dépendances lorsque je devais distribuer une application de bureau exécutable; Tous les bocaux à charge ont dû être présents sur la classe de classe. Il est très facile de configurer et possède une bonne documentation.
Vous pouvez combiner l'utilisation de L'idée est simple: p>
dépendance: copier code> et
dépendance: copie-dépendances code> pour atteindre votre objectif.
Dépendance: copie code> pour récupérer le
pom.xml code> de votre artefact de départ. LI>
Dépendance: Copier-dépendances CODE> L'alimentation du
pom.xml code> Vous êtes extrait à l'étape précédente pour aller chercher tous les dépendances de l'artefact de départ. LI>
Dépendance: copie code> à nouveau pour aller chercher l'artefact de départ lui-même. Li>
OL>
download-jars org.apache.hadoop:hadoop-aws:2.7.3 /tmp/jars
Merci. Cette approche fonctionne parfaitement pour nous. Utilisation de Dépendance: Copier code> pour obtenir le POM le déverrouille.
Pouvez-vous faire un projet qui les utilise comme des dépendances, les déplace et crée son propre artefact avec ces pots?
Je suppose que, mais ça ne se sent pas bien juste. Il devrait y avoir un moyen de télécharger un artefact et son DEPS directement, non?
Je suis entièrement d'accord. Cela ne semble pas juste. Et la dernière chose que quiconque veut, c'est "quelque chose qui fonctionne jusqu'à ce que nous trouvions une meilleure façon" parce que vous serez coincé avec le kludge pour toujours. Mais si tout le reste échoue ... :)