J'ai des fichiers de configuration et divers documents que je souhaite copier de l'environnement de développement vers le répertoire de serveur de développement à l'aide de Maven2. Étrangement, Maven ne semble pas fort dans cette tâche.
Quelques options:
- Utilisation simple d'une tâche de copie dans Maven
<copy file="src/main/resources/config.properties" tofile="${project.server.config}/config.properties"/>
Utilisez le plugin Ant pour exécuter la copie depuis Ant.
Construisez un artefact de type zip , à côté de l'artefact "principal" du POM qui est généralement de type jar , puis décompressez cet artefact du référentiel dans le répertoire cible.
plugin maven-resources , comme mentionné ci-dessous.
Plugin Maven Assembly - mais cela semble nécessiter beaucoup de définitions manuelles, quand je veux faire les choses simplement et "de façon conventionnelle".
Cette page montre même comment construire un plugin pour faire de la copie!
plugin maven-upload , comme mentionné ci-dessous.
maven-dependency-plugin avec copie , comme mentionné ci-dessous.
Tout cela semble inutilement ad hoc: Maven est censé exceller dans l'accomplissement de ces tâches standard sans chichis.
Aucun conseil?
la source
Réponses:
Ne craignez pas le plugin Antrun. Tout simplement parce que certaines personnes ont tendance à penser que Ant et Maven sont dans l'opposition, ils ne le sont pas. Utilisez la tâche de copie si vous devez effectuer une personnalisation unique inévitable:
En répondant à cette question, je me concentre sur les détails de ce que vous avez demandé. Comment copier un fichier? La question et le nom de la variable m'amènent à des questions plus vastes telles que: "Existe-t-il une meilleure façon de gérer le provisionnement du serveur?" Utilisez Maven comme système de génération pour générer un artefact déployable, puis effectuez ces personnalisations soit dans des modules séparés, soit ailleurs. Si vous avez partagé un peu plus de votre environnement de construction, il pourrait y avoir une meilleure façon - il existe des plugins pour provisionner un certain nombre de serveurs. Pourriez-vous attacher un assembly qui est décompressé à la racine du serveur? Quel serveur utilisez-vous?
Encore une fois, je suis sûr qu'il existe un meilleur moyen.
la source
task
paramètre est désormais obsolète ( Antrun Plugin ). Vous devriez utiliser à latarget
place (depuis la 1.5). Malheureusement, il existe des exemples qui mélangent cela; par exempletarget
paramètre etversion
<1,5.la source
Pour copier un fichier, utilisez:
Pour copier un dossier avec des sous-dossiers, utilisez la configuration suivante:
la source
<filtering>
d'empêcher les modifications indésirables, par exemple, dans les fichiers de script qui utilisent des${...}
variables.Le plugin de dépendance maven m'a fait gagner beaucoup de temps à me consacrer aux tâches des fourmis:
La dépendance: la copie est documentend, et a des objectifs plus utiles comme décompresser.
la source
Pour une simple copie-tâches, je peux recommander copy-rename-maven-plugin . C'est simple et simple à utiliser:
Si vous souhaitez copier plusieurs fichiers, remplacez la
<sourceFile>...</destinationFile>
pièce parDe plus, vous pouvez spécifier plusieurs exécutions en plusieurs phases si nécessaire, le deuxième objectif est "renommer", qui fait simplement ce qu'il dit tandis que le reste de la configuration reste le même. Pour plus d'exemples d'utilisation, reportez-vous à la page d' utilisation .
Remarque : ce plugin ne peut copier que des fichiers, pas des répertoires. (Merci à @ james.garriss d'avoir trouvé cette limitation.)
la source
La solution de fourmi ci-dessus est la plus facile à configurer, mais j'ai eu de la chance en utilisant le plug-in maven-upload d'Atlassian. Je n'ai pas pu trouver de bonne documentation, voici comment je l'utilise:
Les variables comme "$ {jboss.host}" référencées ci-dessus sont définies dans mon ~ / .m2 / settings.xml et sont activées à l'aide des profils maven. Cette solution n'est pas limitée à JBoss, c'est juste ce que j'ai nommé mes variables. J'ai un profil pour dev, test et live. Donc, pour télécharger mon oreille sur une instance jboss dans un environnement de test, j'exécuterais:
Voici un extrait de settings.xml:
Remarques: Le référentiel Atlassian maven qui a ce plugin est ici: https://maven.atlassian.com/public/
Je recommande de télécharger les sources et de consulter la documentation à l'intérieur pour voir toutes les fonctionnalités du plugin.
"
la source
Eh bien, maven n'est pas censé être bon pour effectuer de fines tâches granulaires, ce n'est pas un langage de script comme bash ou ant, il est plutôt déclaratif - vous dites - j'ai besoin d'une guerre ou d'une oreille, et vous l'obtenez. Cependant, si vous devez personnaliser l'apparence de la guerre ou de l'oreille à l'intérieur, vous avez un problème. Ce n'est tout simplement pas procédural comme fourmi, mais déclaratif. Cela a des avantages au début et pourrait avoir beaucoup d'inconvénients à la fin.
Je suppose que le concept initial était d'avoir de bons plugins, qui "fonctionnent", mais la réalité est différente si vous faites des choses non standard.
Cependant, si vous mettez suffisamment d'efforts dans vos poms et quelques plugins personnalisés, vous obtiendrez un environnement de construction bien meilleur comme avec ant par exemple (cela dépend de votre projet bien sûr, mais cela devient de plus en plus vrai pour les projets plus gros).
la source
J'ai eu une très bonne expérience avec le plugin copy-maven . Il a une syntaxe beaucoup plus pratique et concise par rapport au plugin maven-resources.
la source
Une façon générique de copier des fichiers arbitraires consiste à utiliser l' abstraction de transport Maven Wagon . Il peut gérer différentes destinations via des protocoles comme
file
,HTTP
,FTP
,SCP
ouWebDAV
.Il existe quelques plugins qui permettent de copier des fichiers via l'utilisation de
Wagon
. Les plus notables sont:Plug-in de déploiement Maven prêt à l'emploi
Voilà l'
deploy-file
objectif. Il est assez rigide mais peut faire le travail:L'inconvénient majeur de son utilisation
Maven Deploy Plugin
est qu'il est conçu pour fonctionner avec les référentiels Maven. Il suppose une structure et des métadonnées particulières. Vous pouvez voir que le fichier est placé sousfoo/bar/1.0/file-1.0.ext
et que les fichiers de somme de contrôle sont créés. Il n'y a aucun moyen de contourner cela.Plugin Wagon Maven
Utilisez l'
upload-single
objectif :L'utilisation de
Wagon Maven Plugin
pour la copie est simple et semble être la plus polyvalente.Dans les exemples ci-dessus, il
<url>
peut s'agir de n'importe quel protocole pris en charge. Consultez la liste des fournisseurs de wagons existants . Par exemplefile:///copy/to
SSH
:scp://host:22/copy/to
Les exemples ci-dessus transmettent les paramètres du plugin dans la ligne de commande. Alternativement, les plugins peuvent être configurés directement dans
POM
. Ensuite, l'invocation sera simplement commemvn deploy:deploy-file@configured-execution-id
. Ou il peut être lié à une phase de construction particulière.Veuillez noter que pour que les protocoles aiment
SCP
fonctionner, vous devrez définir une extension dans votrePOM
:Si la destination vers laquelle vous copiez nécessite une authentification, des informations d'identification peuvent être fournies via les
Server
paramètres .repositoryId
/serverId
transmis aux plugins doit correspondre au serveur défini dans les paramètres.la source
Je peux seulement supposer que votre propriété $ {project.server.config} est quelque chose de personnalisé et se situe en dehors de la disposition de répertoire standard.
Si oui, alors j'utiliserais la tâche de copie.
la source
Une autre façon consiste à regrouper ces éléments dans un artefact à l'aide du plugin d'assemblage. Ensuite, vous pouvez utiliser le plugin de dépendance pour décompresser ces fichiers où vous le souhaitez. Il existe également des objectifs de copie dans le plug-in de dépendance pour copier les artefacts.
la source
J'ai pu rassembler un certain nombre de sources différentes pour cette réponse:
De
~/.m2/settings.xml
:Exécutez ensuite la commande: (le -X est pour le débogage)
mvn -X upload:upload
la source
Pour résumer certaines des bonnes réponses ci-dessus: Maven est conçu pour créer des modules et copier les résultats dans un référentiel Maven. Toute copie de modules dans un répertoire de déploiement / installateur doit être effectuée en dehors du contexte de la fonctionnalité principale de Maven, par exemple avec la commande Ant / Maven copy .
la source