it-swarm.com.de

Wie geben Sie die Compilerversion Java in einer pom.xml-Datei an?

Ich habe einen Maven-Code für Netbeans geschrieben, der ungefähr mehr als 2000 Zeilen enthält. Wenn ich es auf NetBeans kompiliere, ist alles in Ordnung, aber wenn ich es auf der Befehlszeile ausführen möchte, erhalte ich die folgenden Fehler:

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

Ich habe versucht, Java 1.3.1, Compiler-Fehler zu verwenden, aber es sind mehr Fehler aufgetreten. Ich habe in anderen Beiträgen festgestellt, dass ich pom.xml ändern sollte, aber ich weiß nicht wie. Hier ist meine 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>

Es wäre toll, wenn Sie mir helfen können.

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>

Siehe die Konfigurationsseite für das Maven Compiler Plugin:

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

Oh, und: Verwenden Sie nicht Java 1.3.x, die aktuellen Versionen sind Java 1.7.x oder 1.8.x

300

Maven-Compiler-Plugin Es ist bereits in der Plugin-Hierarchie-Abhängigkeit in pom.xml vorhanden. Überprüfen Sie den effektiven POM.

Kurz gesagt, Sie können Eigenschaften wie diese verwenden:

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

Ich benutze Maven 3.2.5

346
leocborges

Im Allgemeinen möchten Sie nicht nur die source -Version (zum Beispiel javac -source 1.8) bewerten, sondern Sie möchten sowohl die source- als auch die target -Version (zum Beispiel javac -source 1.8 -target 1.8) bewerten.
Beachten Sie, dass Sie ab Java 9 die Möglichkeit haben, sowohl Informationen zu übermitteln als auch die Kompatibilität zwischen Kompilierungen zu verbessern (javac -release 9).
Maven, der den Befehl javac umschließt, bietet mehrere Möglichkeiten, um alle diese JVM-Standardoptionen zu übermitteln.

Wie spezifiziere ich die JDK-Version?

Die Verwendung der Eigenschaften maven-compiler-plugin oder maven.compiler.source/maven.compiler.target zur Angabe von source und target ist äquivalent.

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

und

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

sind äquivalent gemäß Maven-Dokumentation des Compiler-Plugins , da die Elemente <source> und <target> in der Compilerkonfiguration die Eigenschaften maven.compiler.source und maven.compiler.target verwenden, wenn sie definiert sind.

source

Das Argument -source für den Compiler Java.
Standardwert ist: 1.6.
Benutzereigenschaft ist: maven.compiler.source.

target

Das Argument -target für den Compiler Java.
Standardwert ist: 1.6.
Benutzereigenschaft ist: maven.compiler.target.

Beachten Sie bei den Standardwerten für source und target Folgendes: Seit dem 3.8.0 des Maven-Compilers haben sich die Standardwerte von 1.5 in 1.6 geändert. .

Ab dem Maven-Compiler-Plugin 3.6 haben Sie eine neue Möglichkeit, die Version Java anzugeben

Sie können das Argument release verwenden:

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

Sie können auch nur die Benutzereigenschaft maven.compiler.release deklarieren:

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

Zu diesem Zeitpunkt wird die letzte Version jedoch nicht ausreichen, da die von Ihnen verwendete Standardversion von maven-compiler-plugin nicht auf einer ausreichend aktuellen Version basiert.

Das Argument Maven release vermittelt release: a neue JVM-Standardoption das wir von Java 9 übergeben könnten:

Kompiliert gegen die öffentliche, unterstützte und dokumentierte API für eine bestimmte VM Version.

Auf diese Weise können Sie standardmäßig dieselbe Version für die JVM-Optionen source, target und bootstrap angeben.
Beachten Sie, dass die Angabe von bootstrap eine gute Methode für Cross-Kompilierungen ist und nicht schadet, wenn Sie auch keine Cross-Kompilierungen durchführen.

Wie kann die JDK-Version am besten angegeben werden?

Für Java 8 und darunter:

Weder maven.compiler.source/maven.compiler.target Eigenschaften noch mit dem maven-compiler-plugin sind besser. Es ändert nichts an den Fakten, da die beiden Methoden letztendlich auf den gleichen Eigenschaften und dem gleichen Mechanismus beruhen: dem Maven Core Compiler Plugin.

Wenn Sie im Compiler-Plugin keine anderen Eigenschaften oder Verhaltensweisen als Java angeben müssen, ist die Verwendung dieser Methode sinnvoller, da dies übersichtlicher ist:

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

Von Java 9:

Mit dem Argument release (dritter Punkt) können Sie genau überlegen, ob Sie dieselbe Version für source und target verwenden möchten.

12
davidxxx

Ich hatte das gleiche Problem im Projekt Eclipse Neon Simple Maven Java

Aber ich füge unten Details in die Datei pom.xml ein

   <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>

Nach einem Rechtsklick auf Projekt> Maven> Projekt aktualisieren (Update erzwingen)

Es löst mich, Fehler im Projekt anzuzeigen

Hoffe es wird hilfreich sein

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