205 votes

Méthodes conseillées pour la copie des fichiers avec Maven

J'ai des fichiers de configuration et de divers documents que je veux copier à partir de l'environnement de dev pour le dev-répertoire du serveur à l'aide de Maven2. Étrangement, Maven ne semble pas solide à cette tâche.


Certaines des options:

  • Simple d'utiliser une copie de la tâche dans Maven

<copy file="src/main/resources/config.properties" tofile="${project.server.config}/config.properties"/>

  • Utiliser le plugin Ant pour exécuter la copie de la Fourmi.

  • Construire un objet de type zip, aux côtés de la "main" artefact de la POM qui est généralement de type jar, puis déballez qu'un artefact dans le le dépôt dans le répertoire cible.

  • maven-ressources plugin, comme mentionné ci-dessous.

  • Maven Assembly plugin -- mais cela semble demander beaucoup de manuel de définitions, quand je veux faire les choses simplement et "de manière conventionnelle."

  • Cette page montre même comment créer un plugin pour faire de la copie!

  • maven-télécharger le plugin, comme mentionné ci-dessous.

  • maven-dépendance-plugin avec la copie, comme mentionné ci-dessous.


Tout cela semble inutilement ad hoc: Maven est censé excel à faire ces tâches standard, sans la moindre difficulté et la peine.

Tous les conseils?

127voto

Tim O'Brien Points 4769

Ne pas hésiter à le Antrun plugin. Juste parce que certaines personnes ont tendance à penser que Ant et Maven sont dans l'opposition, ils ne le sont pas. Utilisation de la tâche de copie si vous avez besoin d'effectuer quelques inévitables one-off de personnalisation:

<project>
  [...]
  <build>
    <plugins>
      [...]
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <phase>deploy</phase>
            <configuration>
              <tasks>

                <!--
                  Place any Ant task here. You can add anything
                  you can add between <target> and </target> in a
                  build.xml.
                -->

              </tasks>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

Pour répondre à cette question, je me concentre sur les détails de ce que vous avez demandé. Comment puis-je copier un fichier? La question et le nom de la variable de me conduire à un plus grand à des questions comme: "Est-il une meilleure façon de traiter avec la mise en service du serveur?" Utiliser Maven comme un système de construction pour générer déployable artefact, puis effectuer ces personnalisations, soit dans des modules séparés ou quelque part d'autre entièrement. Si vous avez partagé un peu plus de votre environnement de compilation, il pourrait y avoir une meilleure façon - il y a des plugins à disposition un certain nombre de serveurs. Pourriez-vous joindre une assemblée qui est décompressé à la racine du serveur? Quel serveur que vous utilisez?

Encore une fois, je suis sûr qu'il ya une meilleure façon.

21voto

Tires Points 310

Le plugin de dépendance maven m’a sauvé beaucoup de temps à caresser avec tâches ant :

La dépendance : copie est documentend et a des objectifs plus utiles comme décompresser.

7voto

Kyle Renfro Points 643

La fourmi solution ci-dessus est plus simple à configurer, mais j'ai eu de la chance en utilisant le maven-téléchargement-plugin à partir d'Atlassian. J'ai été incapable de trouver une bonne documentation, voici comment je l'utilise:

<build>
  <plugin>
    <groupId>com.atlassian.maven.plugins</groupId>
    <artifactId>maven-upload-plugin</artifactId>
    <version>1.1</version>
    <configuration>
       <resourceSrc>
             ${project.build.directory}/${project.build.finalName}.${project.packaging}
       </resourceSrc>
       <resourceDest>${jboss.deployDir}</resourceDest>
       <serverId>${jboss.host}</serverId>
       <url>${jboss.deployUrl}</url>
     </configuration>
  </plugin>
</build>

Les variables "${jboss.hôte}" référencé ci-dessus sont définis dans mon ~/.m2/settings.xml et sont activés à l'aide des profils maven. Cette solution n'est pas limité à JBoss, c'est juste ce que j'ai nommé mes variables. J'ai un profil pour les dev, test, et de vivre. Afin de télécharger mon oreille, pour une instance de jboss dans l'environnement de test, je voudrais exécuter:

mvn upload:upload -P test

Voici un snipet de settings.xml:

<server>
  <id>localhost</id>
  <username>username</username>
  <password>{Pz+6YRsDJ8dUJD7XE8=} an encrypted password. Supported since maven 2.1</password>
</server>
...
<profiles>
  <profile>
    <id>dev</id>
    <properties>
      <jboss.host>localhost</jboss.host> 
      <jboss.deployDir>/opt/jboss/server/default/deploy/</jboss.deployDir>
      <jboss.deployUrl>scp://root@localhost</jboss.deployUrl>
    </properties>
  </profile>
  <profile>
    <id>test</id>
    <properties>
       <jboss.host>testserver</jboss.host>
       ...

Notes: Le Atlassian repo maven qui a ce plugin est ici: https://maven.atlassian.com/public/

Je vous conseille de télécharger les sources et à la recherche, à la documentation de l'intérieur pour voir toutes les fonctionnalités du plugin fournit.

`

4voto

azerole Points 516

J’ai eu la très bonne expérience avec copie-maven-plugin. Il a une syntaxe beaucoup plus pratique et concise par rapport aux ressources-maven-plugin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X