web-dev-qa-db-fra.com

Comment spécifiez-vous la version du compilateur Java dans un fichier pom.xml?

J'ai écrit un code Maven sur Netbeans qui compte environ plus de 2000 lignes. Lorsque je le compile sur netbeans, tout va bien, mais si je veux l'exécuter en ligne de commande, j'obtiendrai les erreurs suivantes:

generics are not supported in -source 1.3
(use -source 5 or higher to enable generics)
        ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();

generics are not supported in -source 1.3
(use -source 5 or higher to enable generics)
        HashSet<Double> resid_List = new HashSet<Double>(Arrays.asList(resid_val));

generics are not supported in -source 1.3
(use -source 5 or higher to enable generics)
        List<Integer> ind_ovlpList = new ArrayList<Integer>(Arrays.asList(ind_ovlp));

generics are not supported in -source 1.3
(use -source 5 or higher to enable generics)
public class ColumnComparator implements Comparator<double[]> {

annotations are not supported in -source 1.3
(use -source 5 or higher to enable annotations)
@Override

J'ai essayé d'utiliser Java 1.3.1, erreurs de compilation , mais j'ai eu plus d'erreurs. J'ai trouvé dans d'autres publications que je devrais modifier pom.xml, mais je ne sais pas comment. Voici mon pom.xml

<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.mycompany</groupId>
  <artifactId>mavenmain</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>mavenmain</name>
    <url>http://maven.Apache.org</url>

   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

   <dependencies>
     <dependency>
       <groupId>junit</groupId>
        <artifactId>junit</artifactId>
       <version>3.8.1</version>
       <scope>test</scope>
     </dependency>
     <dependency>
        <groupId>gov.nist.math</groupId>
        <artifactId>jama</artifactId>
        <version>1.0.2</version>
     </dependency>
   </dependencies>
 </project>

Ce serait génial si vous pouviez m'aider.

245
MTT
<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>(whatever version is current)</version>
        <configuration>
          <!-- or whatever version you use -->
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>
  [...]
</project>

Voir la page de configuration pour le plugin maven compiler:

http://maven.Apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html

Oh, et: n'utilisez pas Java 1.3.x, les versions actuelles sont Java 1.7.x ou 1.8.x

300

maven-compiler-plugin il est déjà présent dans la dépendance de la hiérarchie des plugins dans pom.xml. Enregistrement en vigueur POM.

Pour résumer, vous pouvez utiliser des propriétés comme celle-ci:

<properties>
   <maven.compiler.source>1.8</maven.compiler.source>
   <maven.compiler.target>1.8</maven.compiler.target>
</properties>

J'utilise Maven 3.2.5

346
leocborges

En général, vous ne voulez pas attribuer uniquement la valeur à la version source (javac -source 1.8 par exemple), mais vous souhaitez attribuer une valeur à la fois à la version source et à la version target (javac -source 1.8 -target 1.8 par exemple).
Notez qu'à partir de Java 9, vous disposez d'un moyen de transmettre à la fois les informations et de manière plus robuste pour la compatibilité de compilation croisée (javac -release 9).
Maven qui encapsule la commande javac offre plusieurs façons de transmettre toutes ces options standard de la JVM.

Comment spécifier la version du JDK?

L'utilisation de maven-compiler-plugin ou maven.compiler.source/maven.compiler.target, propriétés permettant de spécifier les propriétés source et target sont équivalentes.

<plugins>
    <plugin>    
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
    </plugin>
</plugins>

et

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

sont équivalentes selon le documentation Maven du plugin du compilateur puisque les éléments <source> et <target> de la configuration du compilateur utilisent les propriétés maven.compiler.source et maven.compiler.target s'ils sont définis.

source

L'argument -source pour le compilateur Java.
La valeur par défaut est: 1.6.
La propriété de l'utilisateur est: maven.compiler.source.

cible

L'argument -target pour le compilateur Java.
La valeur par défaut est: 1.6.
La propriété de l'utilisateur est: maven.compiler.target.

À propos des valeurs par défaut pour source et target, notez que depuis le 3.8.0 du compilateur maven, les valeurs par défaut ont été modifiées de 1.5 à 1.6 .

À partir de maven-compiler-plugin 3.6, vous avez un nouveau moyen de spécifier la version Java.

Vous pouvez utiliser l'argument release :

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <release>9</release>
    </configuration>
</plugin>

Vous pouvez également déclarer uniquement la propriété utilisateur maven.compiler.release:

<properties>
    <maven.compiler.release>9</maven.compiler.release>
</properties>

Mais pour le moment, la dernière ne suffira pas, car la version par défaut de maven-compiler-plugin que vous utilisez ne repose pas sur une version suffisamment récente.

L'argument Maven release véhicule release: a nouvelle option standard de la JVM que nous pourrions passer de Java 9:

Compile contre l'API publique, prise en charge et documentée pour une version spécifique de VM.

Cette méthode offre un moyen standard de spécifier la même version pour les options JVM source, target et bootstrap.
Notez que spécifier bootstrap est une bonne pratique pour les compilations croisées et que cela ne fera pas de mal si vous ne faites pas de compilations croisées non plus.

Quel est le meilleur moyen de spécifier la version de JDK?

Pour Java 8 et inférieur:

Ni maven.compiler.source/maven.compiler.target propriétés ni à l'aide de maven-compiler-plugin ne sont meilleures. Cela ne change rien aux faits puisque finalement les deux manières reposent sur les mêmes propriétés et le même mécanisme: le plugin maven core compiler.

Eh bien, si vous n'avez pas besoin de spécifier d'autres propriétés ou comportements que Java versions dans le plug-in du compilateur, utiliser cette méthode est plus logique car plus concis:

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

De Java 9:

L'argument release (troisième point) est un moyen d'envisager sérieusement si vous voulez utiliser la même version pour les variables source et target.

12
davidxxx

J'ai rencontré le même problème dans le projet Eclipse neon simple maven Java

Mais j'ajoute ci-dessous des détails dans le fichier pom.xml

   <build>
        <plugins>
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

Après un clic droit sur projet> maven> projet de mise à jour (mise à jour forcée cochée)

Sa résoudre moi pour afficher une erreur sur le projet

J'espère que ça vous aidera

Thansk

10
Vijay Gajera
<plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <fork>true</fork>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin> 
0
Sasidhar Reddy