web-dev-qa-db-fra.com

Comment exécuter un plugin maven deux fois avec une propriété différente

Je voudrais construire à partir d'un pom maven exécutant deux exécutions séquentielles du même plugin, dans la même phase, ne différant que par une seule propriété, ce qui entraînera la création de deux archives différentes. Étant donné que la configuration est plutôt compliquée, je ne le copierais PAS pour changer une valeur, ce qui créerait un cauchemar de maintenance. S'il était possible de définir une telle propriété dans la section <executions> de la configuration du plugin, je pourrais éviter ce mal de tête.

Question : Est-ce possible et si oui comment?

Mise à jour : Deux réponses ont mentionné l'utilisation de plusieurs exécutions et l'une d'elles indique que vous pouvez avoir des configurations distinctes pour chaque exécution. Mais étant donné que la majorité de ma configuration est constante entre les deux exécutions, puis-je avoir une configuration au niveau du plug-in et des sections de configuration dans chaque exécution pour les parties différentes?

14
Steve Cohen

Étant donné la configuration simple du plug-in Maven Source Plugin (à titre d'exemple), vous disposez d'une configuration partagée pour toutes ses exécutions (en dehors de l'élément executions), puis d'une configuration personnalisée pour chaque exécution, pour la même phase, comme demandé par votre question:

<build>
    <plugins>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <includePom>true</includePom>
            </configuration>
            <executions>
                <execution>
                    <id>test-id1</id>
                    <phase>verify</phase>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                    <configuration>
                        <finalName>aaa</finalName>
                    </configuration>
                </execution>
                <execution>
                    <id>test-id2</id>
                    <phase>verify</phase>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                    <configuration>
                        <finalName>bbb</finalName>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

L'entrée de configuration <includePom>true</includePom> sera dans ce cas fusionnée avec les configurations personnalisées de chaque exécution et centralisera en tant que telle la configuration commune en tant que configuration générique de plug-in. 

Pour plus de détails sur les différents niveaux de configuration, vous pouvez consulter la documentation officielle de Maven, ici , en particulier l'exemple "Configuration de la compilation pour s'exécuter deux fois". Plus de détails sont également disponibles dans la documentation officielle de POM, ici , section Plugins.

15
A_Di-Matteo

Vous devez créer une exécution différente (toujours liée à la même phase)

Pour éviter la duplication de la configuration, vous pouvez placer le <configuration> en dehors de l'élément <execution>, puis dans les 2 exécutions, vous définissez uniquement la propriété différente.

Tiré du maven docs :

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-myquery-plugin</artifactId>
        <version>1.0</version>
        <executions>
          <execution>
            <id>execution1</id>
            <phase>test</phase>
            <configuration>
              <url>http://www.foo.com/query</url>
              <timeout>10</timeout>
              <options>
                <option>one</option>
                <option>two</option>
                <option>three</option>
              </options>
            </configuration>
            <goals>
              <goal>query</goal>
            </goals>
          </execution>
          <execution>
            <id>execution2</id>
            <configuration>
              <url>http://www.bar.com/query</url>
              <timeout>15</timeout>
              <options>
                <option>four</option>
                <option>five</option>
                <option>six</option>
              </options>
            </configuration>
            <goals>
              <goal>query</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  ...
</project>
3
Augusto

Vous créez deux éléments <execution> dans la déclaration <plugin>. Chaque élément <execution> peut avoir sa propre section <configuration>.

0
tdrury

Je voulais créer un pot et un mettre dans un fichier Zip avec d'autres fichiers de configuration Cela a fonctionné pour moi 

	<plugin>
				<groupId>org.Apache.maven.plugins</groupId>
				<artifactId>maven-Assembly-plugin</artifactId>
				<version>2.4.1</version>
				<executions>
					<execution>
					<id>build-jar-with_dep1</id>
					 <phase>package</phase>
						<configuration>
							<descriptorRefs>
								<descriptorRef>jar-with-dependencies</descriptorRef>
							</descriptorRefs>
							<finalName>${buildversion}</finalName>
							<finalName>finalname</finalName>
							<appendAssemblyId>false</appendAssemblyId>
						</configuration>
						<goals>
	                        <goal>Assembly</goal>
	                    </goals>
					</execution>
					<execution>
					<id>build_Zip1</id>
					 <phase>package</phase>
						<configuration>
							<descriptor>src/Assembly/bin.xml</descriptor>
							<finalName>${buildversion}</finalName>
							<finalName>finalname</finalName>
							<appendAssemblyId>false</appendAssemblyId>
						</configuration>
						<goals>
	                        <goal>single</goal>
	                    </goals>
					</execution>
			
				</executions>
			</plugin>

0
user1620674