pom.xmlファイルでJavaコンパイラのバージョンをどのように指定しますか?


252

約2000行を超えるNetBeansでMavenコードを記述しました。netbeansでコンパイルすると問題はありませんが、コマンドラインで実行したい場合は、次のエラーが発生します。

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

Java 1.3.1のコンパイラエラーを使用しようとしましたが、さらにエラーが発生しました。他の投稿からpom.xmlを変更する必要があることがわかりましたが、方法がわかりません。これが私の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>

あなたが私を助けることができればそれは素晴らしいことです。


2
Javaバージョンをアップグレードする時が来ました。
Sotirios Delimanolis 2013年

5
ジェネリックスはJava 5からサポートされています。そのJavaバージョンより前に機能させることはできません。
Luiggi Mendoza、2013

OpenJDK javacのデフォルトは1.3で、Oracle JDKのデフォルトは1.5です
–ThorbjørnRavn Andersen

どちらも私がプログラマーになる前のことです!
CorayThan '24

回答:


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

mavenコンパイラプラグインの設定ページをご覧ください。

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

そして、Java 1.3.xを使用しないでください。現在のバージョンはJava 1.7.xまたは1.8.xです。


4
また、あなたはMavenのプラグインエンフォーサとMavenを実行するために使用しているJDKのバージョンにチェックを追加したい場合があります:maven.apache.org/enforcer/maven-enforcer-plugin私は別のプロジェクトをサポートする必要があるように私は、これは非常に便利見つけます異なるJDKバージョンにあります。たとえば、Java 7プロジェクトでJava 8を使用してコンパイルすることを避けます。
Wim Deblauwe 2014年

2
プラグインのバージョンがありません。エラーは発生しませんが、バージョンを設定することを強くお勧めします。現在のバージョンは3.3
Lukas Werner、

1
@LukasWernerもちろんそうです。バージョンを追加した場合、数か月ごとに質問を編集する必要があります。妥協を図りました:-)
Sean Patrick Floyd

明確にしてください...このタグ<version>(現在のバージョン)</ version>には何が入りますか?それは1.7のようなものですか?
Elijah

2
@Elijahいいえ、それはJava言語バージョンになります。プラグインのバージョンについて話している。あなたは、このリンクを介していることを見つけることができます:mvnrepository.com/artifact/org.apache.maven.plugins/...
ショーン・パトリック・フロイド

360

maven-compiler-pluginは、pom.xmlのプラグイン階層依存関係にすでに存在しています。有効なPOMをチェックインします。

略して、次のようなプロパティを使用できます。

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

私はMaven 3.2.5を使用しています


「最善」はどちらですか?これは、選択した回答に比べて冗長ではありませんが、隠されているようです。Maven サイトのドキュメントでさえ、プラグインの使用を示しています。
mkobit

2
@mkobitこれは個人的な選択だと思います。コンパイラとソースバージョン以外の設定が必要な場合は、プラグインセクションで行います。
2015年

1
「何か他のものを構成する」の良い点。google / error-proneのようなものを使用したい場合は、プラグインセクションの方法を使用する必要があります。
mkobit 2015年

5
これは、@ mkobitが提供したMavenドキュメントページの最初のメソッドです。はるかに良いですし、コンパイラプラグインのバージョンを固定する必要はありません。
Danila Piatov

IntelliJでプロジェクトを再作成した後、これはうまくいきました。プロジェクトのpomファイルを新しいプロジェクトとして開くことにより、IntelliJでプロジェクトを再度開く必要がありました。これは、プロジェクトを再作成すると想定しています。
user674669

13

通常、sourceバージョンのみを評価するのではなく(javac -source 1.8たとえば)sourcetargetバージョンとバージョンの両方を評価します(javac -source 1.8 -target 1.8たとえば)。
Java 9以降では、両方の情報を伝達する方法と、クロスコンパイル互換性のためのより堅牢な方法(javac -release 9)があることに注意してください。コマンド
をラップするMavenは、javacこれらすべてのJVM標準オプションを伝えるための複数の方法を提供します。

JDKバージョンを指定する方法

使用maven-compiler-pluginまたはmaven.compiler.source/ maven.compiler.targetプロパティを指定するsourcetarget等価です。

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

そして

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

コンパイラプラグインのMavenドキュメントによれば 、<source><target>コンパイラ設定の要素はプロパティmaven.compiler.sourceを使用し、maven.compiler.targetそれらが定義されている場合は同等です。

ソース

-sourceJavaコンパイラーの引数。
デフォルト値はです1.6
ユーザープロパティはですmaven.compiler.source

目標

-targetJavaコンパイラーの引数。
デフォルト値はです1.6
ユーザープロパティはですmaven.compiler.target

デフォルトの値についてsourcetargetすることを、ノート ので、3.8.0Mavenのコンパイラの、デフォルト値から変更されている1.51.6

maven-compiler-plugin 3.6から、Javaバージョンを指定する新しい方法があります

あなたは使用することができ、引数をrelease

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

また、ユーザープロパティのみを宣言することもできますmaven.compiler.release

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

ただし、現時点では、maven-compiler-plugin使用するデフォルトバージョンが最新の十分なバージョンに依存していないため、最後のバージョンでは不十分です。

Maven release引数は次のことを伝え releaseます。Java9 から渡すことができる新しいJVM標準オプション

特定のVMバージョンについて、公開され、サポートされ、文書化されているAPIに対してコンパイルします。

この方法では、のために同じバージョンを指定するための標準的な方法を提供sourcetargetおよびbootstrapJVMオプションを。
を指定することbootstrapはクロスコンパイルに適した方法であり、クロスコンパイルを行わなくても問題はありません。

JDKバージョンを指定する最良の方法はどれですか。

Java 8以下の場合:

maven.compiler.source/ maven.compiler.targetプロパティまたは使用のどちらもmaven-compiler-plugin優れています。最終的に2つの方法が同じプロパティと同じメカニズムに依存しているため、これは事実を変更しません:Mavenコアコンパイラプラグイン。

まあ、コンパイラプラグインでJavaバージョン以外のプロパティや動作を指定する必要がない場合は、この方法を使用する方が簡潔です。

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

Java 9から:

release引数(第3のポイントは)あなたが同じバージョンを使用したい場合は、強く考慮すべき方法であるsourcetarget


10

私は日食ネオンの単純なmaven Javaプロジェクトで同じ問題に直面しました

しかし、私は以下の詳細を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>

プロジェクトを右クリックした後> maven>プロジェクトを更新(チェックされた強制更新)

それは私にプロジェクトのエラーを表示するように解決します

お役に立てれば幸いです

タンスク


これは、SQL Server用のMicrosoft JDBCドライバー用のSqlServerSampleアプリを作成しようとしたときにうまくいきました。
スカイ---船長2017

0
<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> 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.