Maven: comment copier un artefact dans un répertoire spécifique?

L'objectif" install " copie l'artefact dans le répertoire cible et dans le référentiel local.

Comment puis-je dire à Maven de le copier également dans un répertoire donné (comme le répertoire de déploiement de JBoss par exemple).

22
demandé sur edutesoy 2011-08-15 13:34:20

4 réponses

L'objectif copie de maven-dépendance-plugin fait ce que vous voulez, voir les exemple.

Ce n'est cependant pas une bonne idée de copier quoi que ce soit en dehors de votre répertoire cible (ou ${project.build.directory} pour être précis) - surtout si une telle action est attachée à une phase de construction, car elle introduit des effets secondaires inattendus de la construction, et parfois même une perte de reproductibilité.

Comme le note @Andreas_D, il existe une meilleure alternative pour le déploiement de JBoss; de même pour le déploiement de autres appservers.

17
répondu Petr Kozelka 2012-11-11 13:13:16

Selon http://maven.apache.org/plugins/maven-dependency-plugin/examples/copying-artifacts.html vous pouvez copier l'artefact qui vient d'être construit dans un répertoire spécifique:

<project>
    [...]
    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.8</version>
          <executions>
            <execution>
              <id>copy-installed</id>
              <phase>install</phase>
              <goals>
                <goal>copy</goal>
              </goals>
              <configuration>
                <artifactItems>
                  <artifactItem>
                    <groupId>${project.groupId}</groupId>
                    <artifactId>${project.artifactId}</artifactId>
                    <version>${project.version}</version>
                    <type>${project.packaging}</type>
                  </artifactItem>
                </artifactItems>
                <outputDirectory>some-other-place</outputDirectory>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>
    [...]
  </project>
11
répondu Jörg 2013-08-06 19:08:18

Si vous souhaitez copier un fichier sur un serveur web (local ou distant), vous pouvez utiliser le plugin Maven upload:

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

Et pour configurer les paramètres de manière intelligente, j'utilise des profils maven :

<profiles>
    <!-- local deployment -->
    <profile>
        <id>developpement</id>
        <properties>
            <jboss.host>localhost</jboss.host>
            <jboss.deployDir>appli/jboss-4.0.4.GA/server/default/deploy/</jboss.deployDir>
            <jboss.deployUrl>file://C:/</jboss.deployUrl>
        </properties>
    </profile>
    <!-- distant deployment -->
    <profile>
        <id>validation</id>
        <properties>
            <jboss.host>ENV_val</jboss.host>
            <jboss.deployDir>/home/envval/jboss/server/default/deploy/</jboss.deployDir>
            <jboss.deployUrl>scp://PROJECT_LAN_HOST</jboss.deployUrl>
        </properties>
    </profile>
</profiles>

J'ai créé un "lanceur de fourmis", pour l'utiliser en cliquant sous Eclipse ant view:

<target name="copy war to JBoss local" description="Copy war to local JBoss">
    <maven goal="upload:upload" options="-Pdeveloppement" />
</target>

, Mais vous pouvez simplement exécuter sur une ligne de commande :

mvn upload:upload -Pdeveloppement

En passant, pour un déploiement à distance, vous pourriez avoir besoin d'un mot de passe de connexion pour que scp fonctionne. Vous devez les ajouter à vos paramètres Maven.fichier xml :

<settings>
  ...
  <servers>
    <server>
      <id>ENV_val</id>
      <username>login</username>
      <password>password</password>
    </server>
  </servers>
  ...
</settings>
8
répondu Tristan 2011-08-15 09:53:50

, La meilleure approche serait d'utiliser un plugin qui permettra de déployer votre application, tels que fret ou jboss-maven plugin (crédit à @Andreas_D pour ça).

Ce serait une meilleure approche pour utiliser une copie ou un outil de téléchargement Générique puisque le déploiement est ce que vous essayez réellement de faire.

Avec la cargaison plugin, vous avez la possibilité de déployer pour une variété de serveurs. Nous avons pris cette approche pour tester localement dans la jetée en utilisant le Jetty plugin pendant la construction et avait un profil à déployer sur tomcat à la demande via cargo.

Remarque: Si votre serveur cible (JBOSS) est également installé localement sur la boîte de développement, vous pouvez également utiliser cargo pour démarrer/arrêter votre serveur pendant votre processus de construction. L'inconvénient de cette approche est que vous en aurez besoin pour référencer son emplacement dans le fichier pom, donc soit tous les développeurs l'installent dans le même emplacement, soit une propriété système qui définit où il se trouve situé (similaire à JAVA_HOME).

2
répondu Robin 2011-08-15 13:57:29