Comment spécifier la version du compilateur Java dans une pom.fichier xml?

j'ai écrit un code maven sur netbeans qui a environ plus de 2000 lignes. Quand je le compile sur netbeans, tout va bien, mais si je veux l'exécuter en ligne de commande, j'obtiens ces erreurs:

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 compilateur , mais j'ai eu plus d'erreurs. J'ai trouvé d'autres posts 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 grande si vous pouvez m'aider.

222
demandé sur Community 2013-05-24 00:42:06

4 réponses

<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 de compilateur maven:

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

280
répondu Sean Patrick Floyd 2015-07-23 08:19:49

maven-compiler-plugin il est déjà présent dans la dépendance de la hiérarchie des plugins dans pom.XML. Vérifiez la POM Effective.

pour faire court, vous pouvez utiliser des propriétés comme ceci:

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

j'utilise maven 3.2.5

310
répondu leonardoborges 2018-07-09 12:01:54

j'ai fait face à la même question dans eclipse néon simple maven projet java

mais j'ajoute ci-dessous des détails à l'intérieur de pom.fichier 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 clic droit sur project > maven > update project (checked force update) ""

Sa volonté de m'afficher une erreur sur le projet

j'Espère que ça sera utile

Merci

8
répondu Vijay Gajera 2017-05-03 07:19:26

en général, vous ne voulez pas seulement évaluer la version source ( javac -source 1.8 par exemple), mais vous voulez évaluer à la fois la version source et la version target ( javac -source 1.8 -target 1.8 par exemple).

Notez que de Java 9, Vous avez un moyen de transmettre à la fois l'information et d'une manière plus robuste pour la compatibilité de compilation croisée ( javac -release 9 ).

Maven qui enveloppe la commande javac fournit plusieurs façons de transmettre tous ces Options standard JVM.

comment spécifier la version JDK?

utilisant les propriétés maven-compiler-plugin ou maven.compiler.source / maven.compiler.target pour spécifier les propriétés source et target sont équivalents.

<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 équivalents selon la Maven documentation du plugin de compilateur depuis le <source> et le <target> les éléments dans 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 .

concernant les valeurs par défaut pour source et target , notez que depuis le 3.8.0 du compilateur maven, les valeurs par défaut sont passées de 1.5 à 1.6 .

du maven-compiler-plugin 3.6 vous avez une nouvelle façon de spécifier la version Java

vous pouvez utiliser le release argument :

<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 juste la propriété de l'utilisateur maven.compiler.release :

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

mais à ce moment-là la dernière ne sera pas suffisante car la version par défaut maven-compiler-plugin que vous utilisez ne repose pas sur une version assez récente.

Maven "1519320920 argument de" véhicule release : un nouvelle JVM standard option que nous avons pu passer de Java 9 :

Compile contre le public, pris en charge et API documentée pour un version VM spécifique.

cette façon fournit une façon standard de spécifier la même version pour le source , le target et le bootstrap JVM options.

Notez que spécifier le bootstrap est une bonne pratique pour les compilations croisées et cela ne fera pas de mal si vous ne faites pas de compilations croisées non plus.

Quelle est la meilleure façon de spécifier la version JDK?

pour Java 8 et inférieur:

ni maven.compiler.source / maven.compiler.target properties ou utilisant la maven-compiler-plugin est mieux. Il ne change rien dans les faits puisque finalement les deux voies reposent sur les mêmes propriétés et le même mécanisme : le plugin de compilateur maven core.

Eh bien, si vous n'avez pas besoin de spécifier d'autres propriétés ou comportements que les versions Java dans le plugin de compilateur, en utilisant cette façon fait plus de sens que ce qui est plus concis:

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

De Java 9:

le release argument (troisième point) est une façon de fortement considérer si vous voulez utiliser la même version pour le source et le target .

1
répondu davidxxx 2018-08-30 19:11:07