私は、Java 8のいくつかの新機能をテストし、その例を私のIDE(最初はEclipse、次にIntelliJ)にコピーしました 。ここで
Eclipseはラムダ式をまったくサポートしておらず、IntelliJはエラーを報告し続けました
この言語レベルではラムダ式はサポートされていません
これが私のインストール、コード、またはサポートに問題があるかどうかを知りたいのですが。
このソリューションはAndroid Studio 3.0以降で動作します。
Source Compatibility
とTarget Compatibility
の両方を1.8
に変更します
対応するbuild.gradleファイルで直接設定することもできます。
Android {
...
// Configure only for each module that uses Java 8
// language features (either in its source code or
// through dependencies).
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
Intellij 13では、以下のナビゲーションでプロジェクト言語レベル自体を8.0
に変更するだけです。
File
|
|
---------Project Structure -> Project tab
|
|________Project language level
Modules lang level
用のmavenプラグインがなかったときも私はJava compiler
を更新しなければなりませんでした。
File
|
|
---------Project Structure -> Modules tab
|
|________ language level
しかし、既にModule lang level
がある場合、このmaven plugin
は自動的に修正されます。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
変更後はすべてが良さそう
Android Studio Canary Build(3. +)では、次のことができます。
ファイル - >プロジェクト構造 - >モジュールセクションを見てください。あなたのクラスのモジュール名があります。 Javaを1.8バージョンにアップグレードしたいモジュールをクリックしてください。 - >「ソース互換性」と「ターゲット互換性」を1.7以下から1.8に変更。他に何も変更しないでください。 - > [適用]をクリックします
今グラドルは再同期され、あなたのエラーは削除されます。
Build.gradleアプリケーションにcompileOptions
を追加するだけです。
Android {
...
defaultConfig {
...
jackOptions {
enabled true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
Android Studio 3.0.1以降を使用している最近のユーザーのためのものです。 Alt + Enterをクリックして、言語レベルを8.0にアップグレードします - ラムダ、注釈の入力など。
IntelliJ IDEA 15でJava 8(ラムダなど)でコンパイルする
CTRL + ALT + SHIFT + S
またはファイル/プロジェクト構造
プロジェクトタブを開く
Project SDKを互換性のあるJavaバージョンに設定する(1.8)
プロジェクトの言語レベルを8に設定
モジュールを開くタブ
言語レベルを8に設定し、[OK]をクリックします
CTRL + ALT + S
またはファイル/設定
ビルド、実行、デプロイ/コンパイラ/ Javaコンパイラ
ターゲットバイトコードのバージョンを1.8に変更し、[OK]をクリックします。
使用:IntelliJ IDEA 2017.1.4ビルド番号IU-171.4694.23
プロジェクト設定/プロジェクトタブで言語レベルを変更しても何も起こりませんでした。代わりに打つ Alt + Enter そして、「言語レベルを8に設定 - ラムダ、タイプ注釈など」を選択します。そしてそれは自動的に解決しました。
Pomファイルに次のブロックを追加することは私のために働きました:
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
以下の設定を確認してください。
ファイル - >プロジェクト構造 - >プロジェクトタブ。
*Project SDK should be set to 8 or above.*
ファイル - >プロジェクト構造 - >モジュール。
*Check that your or all modules has Language level set to 8 or above.*
[ファイル] - > [設定](または[その他の設定] - > [新しいアイデア]バージョンの新しいプロジェクトの設定)
*Search for Java compiler and check if Project byte code version
and per module byte code version is set 8 or above.*
あなたの問題は上で定義されたカテゴリのどれかに入るかもしれません。
同じプロジェクト(Android Studio 3.3.2
、gradle-4.10.1-all.Zip
、compileSdkVersion 28
、buildToolsVersion '28.0.3'
)は新しい高速Windowsマシンでも問題なく動作し、古いUbuntuではJava 8
のものに赤い下線を引きます。 18.04ノートパソコン(ただし、プロジェクトはUbuntu上でエラーなしでコンパイルされています)。
赤で下線を引かないように強制するために変更した2つのことは、incremental true
とdexOptions
を除いたことだけです。
compileOptions {
// incremental true
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
//dexOptions {
// javaMaxHeapSize "4g"
//}
app
レベルのbuild.gradle
にあります。
Stephen Cが指摘したように、パッチのインストール時にEclipse Kepler(4.3)はJava 8をサポートしています(インストール手順 ここ )。
インストールしたら、プロジェクトにJava 8を使用するように指示する必要があります。まずJDKをEclipseに追加します。
次に、プロジェクトにJDK 1.8を使用するように指示します。
IntelliJやEclipseに上記のプロジェクト固有の設定を適用した後でも、まだ失敗していました。
私にとってうまくいったのは、POM XMLで1.8と設定されたsourceとtargetのMavenプラグインの追加でした:
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.abc.sparkcore.JavaWordCount</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Ctrl + Alt + Shift + Sを押し、次にプロジェクトから言語レベル1.8を選択し、Lambda式についてもっと読む ここ
考えられる原因#1(この質問の最初の3つの答えと同じ):プロジェクト構造の設定
[ファイル]> [プロジェクト構造]> [プロジェクト設定]で、[プロジェクト]に移動し、プロジェクトSDKを1.8(バージョン65以降、最新は112)に設定し、プロジェクト言語レベルを8に設定。
[ファイル]> [プロジェクト構造]> [プラットフォーム設定]で、[プロジェクト]に移動し、JDKホームパスが1.8に設定されていることを確認します(バージョン65以上で、最新は112です)。
上記が機能しない場合は、コンパイラのターゲットバイトコードバージョンを確認し、考えられる原因#2に進みます。
考えられる原因#2:コンパイラ
ご多幸を祈る :)
Intellij 14では、以下の設定が私のために働きました。 Intellij14設定
最初にあなたが使っているJDKのバージョンをチェックしてください、それは1.8以上であるべきです。
その場合は、以下の手順に従ってください。
プロジェクトとモジュールの言語レベルをIntellijに変更します。
プロジェクト
1.ファイル - >プロジェクトの構造 - >プロジェクト - >プロジェクトの言語レベル
2.ファイル - >プロジェクトの構造 - >モジュール - >プロジェクトの言語レベル
ラムダ式でEcpliseをサポートするには:
この答えは新しい更新されたintelliJのために働いていない...新しいintelliJのために..
- >ファイル - >プロジェクト構造 - >グローバルライブラリ==> JDK 1.8以上のバージョンに設定してください。
ファイル - >プロジェクト構造---> projects ===>「プロジェクト言語マニュアル」を8に設定
ファイル - >プロジェクト構造---> project sdk ==> 1.8
これにより、プロジェクトのラムダ式が有効になります。
私にとっては提供された解決策はどれもうまくいきませんでした。
これが最後の手段です。 - >プロジェクトの.imlファイルを開くと、LANGUAGE_LEVELがJDK_1_8または希望のバージョンに変更されます。 - >これでうまくいかない場合は、プロジェクトのルートディレクトリで "JDK"をgrepして、バージョン設定を含むファイルを見つけて、それを好みのバージョンに設定してください。