web-dev-qa-db-ja.com

Mavenコンパイルエラー:(-source 7以上を使用して、ダイヤモンド演算子を有効にします)

IntelliJ、JDK1.8、maven 3.2.5でmavenを使用しています。コンパイルエラーが発生しました:-source 7以上を使用して、ダイヤモンドオペラを有効にします。詳細は次のとおりです。

  [ERROR] COMPILATION ERROR : 
  [INFO] -------------------------------------------------------------
  [ERROR] TrainingConstructor.Java:[31,55] diamond operator is not supported in -source 1.5 (use -source 7 or higher to enable diamond operator)
  [ERROR] DTM.Java:[79,21] try-with-resources is not supported in -source 1.5  (use -source 7 or higher to enable try-with-resources)
  [ERROR] ticons.Java:[53,44] diamond operator is not supported in -source 1.5  (use -source 7 or higher to enable diamond operator)

助言がありますか?この-sourceレベルを設定する他の構成はありますか? Java 1.8を使用していないようです。

44
HappyCoding

maven-compiler-pluginがどのように構成されているかを確認します。Javaバージョン7以降を使用する必要があります。

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
    </configuration>
</plugin>

より完全な回答については、 下の1つ を参照してください。

70
Sergey Pauk

解決策1-pom.xmlでこれらのプロパティを設定します

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

解決策2-Mavenコンパイラプラグインを構成する(常にpom.xml内)

<build>

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

なぜ起こるのか

問題が発生するのは

[...]現在、デフォルトのソース設定は1.5で、デフォルトのターゲット設定は1.5です(Mavenを実行するJDKに依存しないこれらのデフォルトを変更する場合は、Javaコンパイラの-sourceおよび-targetの設定の説明に従ってソースとターゲットを設定する必要があります。

Mavenコンパイラプラグインの概要(バージョン3.3まで)

最新のMavenバージョンでは:

また、Mavenを実行するJDKに関係なく、現在のデフォルトのソース設定は1.6で、デフォルトのターゲット設定は1.6です。 「Javaの-​​sourceおよび-targetの設定」の説明に従って、sourceおよびtargetを設定してこれらのデフォルトを変更することを強くお勧めします。コンパイラ。

Maven Compiler Plugin Introduction

そのため、JDKを変更してもソースレベルには影響しません。そのため、使用するソースレベルをMavenに伝える方法がいくつかあります。

使用するJDKバージョン?

この例のようにターゲット1.7を設定する場合、mvnコマンドが実際にjdk7(またはそれ以上)で起動されることを確認してください

IDEの言語レベル

通常、IDEはプロジェクト構成のソースとしてmaven pom.xmlファイルを使用します。 IDEのコンパイラ設定を変更しても、必ずしもMavenビルドに影響するわけではありません。そのため、プロジェクトを常にMavenで管理可能(および他のIDEと相互運用可能)に保つ最良の方法は、pom.xmlファイルを編集し、IDEにMavenと同期するように指示することです。

54
Fabio Bonfante

設定を変更する必要があります。

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.2</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>
  [...]
</project>

JavaCのsource/tagetオプションとJDK 1.8/1.7などの使用法の違いを学ぶ必要があります。

それとは別に、use maven-compiler-pluginをアップグレードする必要があります。

5
khmarbaise

すでに@Sergey Paukおよび@khmarbaiseソリューションを試した場合は、設定->ビルド、実行、展開->コンパイラ-> Javaコンパイラも確認してください。特定のモジュールのターゲットバイトコードバージョンがあります。

2
pezetem