7
votes

Maven: télécharger Artefact et ses DEP à un répertoire spécifique

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:

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.

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.

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.

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.


3 commentaires

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 ... :)


3 Réponses :


0
votes

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 pom car ce projet ne créera aucun artifcat lui-même.

Utilisez ensuite la dépendance : dépendances de copie 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.


0 commentaires

1
votes

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 xxx

Ensuite, l'utilisateur peut simplement demander zip , en plus des "coordonnées Maven" régulières pour obtenir un fichier zip avec toutes les dépendances.


1 commentaires

+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.



1
votes

Vous pouvez combiner l'utilisation de dépendance: copier code> et dépendance: copie-dépendances code> pour atteindre votre objectif.

L'idée est simple: p>

  • Utilisez Dépendance: copie code> pour récupérer le pom.xml code> de votre artefact de départ. LI>
  • Utilisez 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>
  • Utilisez 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
    

  • 1 commentaires

    Merci. Cette approche fonctionne parfaitement pour nous. Utilisation de Dépendance: Copier pour obtenir le POM le déverrouille.