2016-05-27 9 views
0

JDK 1.8をインストールして設定しました。JAVA_HOMEJDK 1.8です。私はapache-maven-3.0.5を使用しています。私はmavenプロジェクトを作成し、maven-compiler-plugin(3.3)<source><target>から1.7を設定しました。MavenがJavaコンパイラに準拠していないレベル

問題は、私はString.join()またはmap.remove(key, value)のような任意のJava 1.8の機能を使用する場合、まだ私は1.7にコンパイラレベルを設定していても、正常にコンパイルされています。

JAVA_HOMEをJDK 1.7ディレクトリに向けると、コンパイルエラーが発生します。

私のpom.xmlにコンパイラレベルを1.7に設定したときにJDK 1.8を指し示すJAVA_HOMEを持っていても、コンパイラレベル(1.7)に従ってエラーをスローする必要があります。

私には何が欠けていますか?

PS:Eclipse IDEから実行すると、正しいJDK(1.7)を使用してエラーが発生しています。しかし、コマンドラインから実行すると、私はこの問題にぶち当たっています。

答えて

3

あなたは二つのことを混合されています

  • コンパイラ(例えばdefaultメソッド、ラムダ)
  • Javaライブラリ/ API(例えばStreamOptionalString.join

Mavenのが唯一のコンパイラを確認することができますレベルでは、JDK 1.8にあるライブラリを使用していますが、これはJDK 1.7でコードを実行しない限り問題ありません。

さらに、新しいバージョンの標準ライブラリにはどのメソッド/クラスが表示されているのかわからない場合もあります(@sinceタグですべてがマークされているわけではありません)。javacで合併しようとすると同様の結果になります。

2

ソースレベルとターゲットレベルを変更しても、JDK 8でコンパイルするときに1.8 APIを使用しているかどうかはチェックされません。言語機能のみがチェックされます。

Animal Sniffer Maven pluginを使用して、1.8 APIを使用しようとするとビルドに失敗するように設定できるAPIチェックを行うことができます。

関連する問題