27 votes

Paramètres du compilateur maven par défaut

En ce moment, j'écris une petite application java par moi-même, avec quelques fichiers pom.xml de maven. Je veux que tous mes paquets maven compilent avec jdk 1.6, et je n'arrive pas à trouver un bon moyen de le faire sans le paramétrer manuellement dans chaque POM - j'en ai marre du copier-coller.

<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
 <source>1.6</source>
 <target>1.6</target>
</configuration>

dans chaque fichier pom.xml que je génère.

Existe-t-il un moyen plus simple de résoudre ce problème ?

14voto

dave Points 9000

Créez un pom-only ( <packaging>pom</packaging> ) qui a les paramètres du compilateur (et tout autre paramètre par défaut) que vous voulez. Vous pouvez le traiter comme n'importe quel autre projet (le libérer, le déployer dans votre repo Maven, etc.).

Mettez un parent en haut de vos fichiers pom :

<parent>
  <groupId><!-- parent's group id --></groupId>
  <artifactId><!-- parent's artifact id --></artifactId>
  <version><!-- parent's version --></version>
</parent>

Cela n'est pas d'une grande utilité si vous ne voulez définir que les paramètres du compilateur. Mais si vous vous retrouvez à configurer un grand nombre de plugins, de rapports et de dépendances de la même manière pour tous les projets, vous pouvez créer un parent qui les gouverne tous.

BTW - soyez prudent lorsque vous déclarez dependencies y plugins dans votre fichier pom parent. En général, vous voudrez privilégier dependencyManagement y pluginManagement . Voir le site documentation pour plus de détails.

6voto

matt b Points 73770

Vous pouvez spécifier ce plugin et cette configuration dans votre site Web. ~/.m2/settings.xml qui l'appliquera ensuite à tous les projets.

Cependant, cela a l'inconvénient de rendre vos projets non portables - tenter de construire le même code avec le même pom.xml échouera sur d'autres machines qui n'ont pas le même settings.xml valeurs que vous.

2voto

Pascal Thivent Points 295221

J'en ai marre du copier-coller

Oui, et vous devriez utiliser POM héritage pour éviter cela et configurer le maven-compiler-plugin dans le POM parent.

Une autre option serait d'utiliser la solution suggérée par @matt (et il a exposé le pour et le contre de l'utilisation de settings.xml ).

Dans les deux cas, il s'agit généralement d'un paramètre que j'aime vérifier à l'aide de la fonction maven-enforcer-plugin et son requireJavaVersion que vous configurerez comme suit :

<project>
  [...]
  <build>
   <plugins>
     <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <executions>
          <execution>
            <id>enforce-versions</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <requireJavaVersion>
                  <version>1.6</version>
                </requireJavaVersion>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

Mais il peut faire plus (comme vérifier la version de maven). Très utile.

2voto

kopper Points 1266

Je veux que tous mes paquets maven soient compilés avec jdk 1.6.

S'il s'agit d'un projet multi-module, il suffit de mettre ces paramètres dans le POM de premier niveau sous pluginManagement .

Si vous avez plusieurs projets indépendants, il suffit de copier-coller cette configuration. Méfiez-vous des solutions "intelligentes" qui consistent à définir cette configuration de manière globale. Un jour vous voudrez utiliser des paramètres de compilation différents pour un ou deux de vos projets et le cauchemar commencera :-)

Rappelez-vous...

Gardez les choses aussi simples que possible, mais pas plus simple .

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