55 votes

Comment amener Maven à la guerre: éclaté mais pas guerre: guerre

J'ai un pom Maven qui utilise <packaging>war</packaging>. Mais en fait, je ne veux pas construire la guerre de fichier, je veux simplement que tous les dépendants pots recueillies et à un déploiement complet du répertoire créé.

Donc, je suis de l'exécution de l' war:exploded but de générer le répertoire de déploiement:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <configuration>
                <webappDirectory>target/${env}/deploy</webappDirectory>
                <archiveClasses>true</archiveClasses>
            </configuration>
            <goals>
                <goal>exploded</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Le problème, c'est la guerre, le fichier est construit. Est-il un moyen simple d'avoir des <packaging>war</packaging> execute l' war:exploded objectif au lieu de la guerre:la guerre de l'objectif?

Ou est-il un autre moyen simple de faire cela?

75voto

Michael Wyraz Points 449

La solution est assez simple. Vous devez écraser l’exécution par défaut du plug-in war pour le désactiver et ajouter votre propre exécution (pour éclaté):

 <pluginManagement>
    <plugins>
            <plugin><!-- don't pack the war  -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <executions>
                    <execution>
                        <id>default-war</id>
                        <phase>none</phase>
                    </execution>
                    <execution>
                        <id>war-exploded</id>
                        <phase>package</phase>
                        <goals>
                            <goal>exploded</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
    </plugins>
</pluginManagement>
 

44voto

cetnar Points 6170

Selon les liaisons de cycle de vie intégrées pour les emballages de guerre en phase de paquet war: war mojo est appelé.

Vous pouvez appeler la phase précédente 'prepare-package' - toutes les actions seront effectuées et après cet appel, appelez mojo war: éclaté

 mvn prepare-package war:exploded
 

Les résultats seront les mêmes que les vôtres mais aucune guerre ne sera créée.

6voto

Rich Seller Points 46052

La seule façon que je peux penser à faire ce que vous voulez est de définir l'utilisation pom emballage (ou en créer un personnalisé d'emballage) et de lier les objectifs requis à partir de la guerre de l'emballage concerné, les phases du cycle de vie. Si vous allez pour pom emballage, vous pouvez utiliser de définir la guerre:la guerre d'exécution dans un profil pour vous permettre de l'emballage, mais vous aurez besoin d'utiliser le build-helper-maven-plugin fixez-artefact but de fixer la guerre à la pom.

Remarque avec cette approche si vous voulez utiliser une autre guerre de traitement spécifique, il peut vous causer des problèmes.

Le cycle de vie des liaisons pour la guerre d'emballage sont énumérés dans l' Introduction à La construction du Cycle de vie (voir le "Défaut du Cycle de vie des Liaisons - Emballage ejb / ejb3 / jar / par / rar / guerre" de la section).

Pour lier pertinentes plugin exécutions à la pom emballage que vous feriez comme suit:

<build>
  <plugins>
    <plugin>
      <artifactId>maven-resources-plugin</artifactId>
      <executions>
        <execution>
          <id>process-resources</id>
          <phase>process-resources</phase>
          <goals>
            <goal>resources</goal
          </goal>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <artifactId>maven-compile-plugin</artifactId>
      <executions>
        <execution>
          <id>compile</id>
          <phase>compile</phase>
          <goals>
            <goal>compile</goal
          </goal>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <artifactId>maven-resources-plugin</artifactId>
      <executions>
        <execution>
          <id>process-test-resources</id>
          <phase>process-test-resources</phase>
          <goals>
            <goal>testResources</goal
          </goal>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <artifactId>maven-surefire-plugin</artifactId>
      <executions>
        <execution>
          <id>test</id>
          <phase>test</phase>
          <goals>
            <goal>test</goal
          </goal>
        </execution>
      </executions>
    </plugin>
    <!-- package not wanted, install and deploy already defined for pom packaging-->
    <!--define war:war execution in a profile in case it is needed-->

0voto

l15a Points 925

Pour autant que je sache (je suis encore nouveau sur maven), ce n'est pas possible. Le seul cycle de vie par défaut que vous pouvez ignorer est le test. Pour arriver au déploiement, vous devez emballer. Vous pouvez lire tout sur l'ordre d'exécution du cycle de vie par défaut ici: http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference

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