I was testing out some new features of Java 8 and copied the example into my IDE (Eclipse originally, then IntelliJ) as shown here
Eclipse offered no support whatsoever for lambda expressions, and IntelliJ kept reporting an error
Lambda expressions not supported at this language level
I would like to know if this is a problem with my install, the code, or support.
This question is related to
java
intellij-idea
lambda
java-8
Adding below lines in app level build.gradle in Android project solved issue.
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
To compile with Java 8 (lambdas etc) in IntelliJ IDEA 15;
CTRL + ALT + SHIFT + S
or File / Project Structure
Open Project tab
Set Project SDK to compatible java version (1.8)
Set Project language level to 8
Open Modules tab
Set Language level to 8, click OK
CTRL + ALT + S
or File / Settings
Build, Execution, Deployment / Compiler / Java Compiler
Change Target bytecode version to 1.8, click OK
For latest users using Android studio 3.0.1 or above. Simply click Alt + Enter and upgrade your language level to 8.0 - Lambdas, type annotations etc.
Ctrl + Alt + Shift + S and then from project select the language level 1.8, read more about Lambda Expressions here
Just add compileOptions
in build.gradle yours app:
android {
...
defaultConfig {
...
jackOptions {
enabled true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
Actually, Eclipse support for Java 8 is available: see here and here.
In Android studio canary build(3.+), you can do the following:
File -> Project Structure -> Look in Modules Section, there are names of modules of your class. Click on the module in which you want to upgrade java to 1.8 version. -> Change "Source Compatibility" and "Target Compatibility" to 1.8 from 1.7 or lower. Do not change anything else. -> Click Apply
now gradle will re-sync and your error will be removed.
First check the version of JDK you are using, it should higher than 1.8.
If it is then proceed to do below steps.
Change Language level of Project and modules in Intellij.
Project
1.File->Project Structure->Project->Project language level Change it to 8 for lamba expressions to work
2.File->Project Structure->Module->Project language level Change it to 8 for lamba expressions to work
Possible Cause #1 (same as the first 3 answers for this question): Project Structure Settings
File > Project Structure > Under Project Settings, go to Project > set Project SDK to 1.8 (with version 65 or above, latest is 112) and set Project Language Level to 8.
File > Project Structure > Under Platform Settings, go to Project > ensure that your JDK home path is set to 1.8 (with version 65 or above, latest is 112).
If the above does not work, check the target bytecode version of your compiler and move on to Possible Cause #2.
Possible Cause #2: Compiler
Best wishes :)
For intellij 13,
Simply change the Project language level itself to 8.0
with following navigation.
File
|
|
---------Project Structure -> Project tab
|
|________Project language level
I also had to update Modules lang level
when there was no maven plugin for java compiler
.
File
|
|
---------Project Structure -> Modules tab
|
|________ language level
But this Module lang level
would automatically be fixed if there's already a maven plugin
for it,
<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>
After changes everything looks good
The same project (Android Studio 3.3.2
, gradle-4.10.1-all.zip
, compileSdkVersion 28
, buildToolsVersion '28.0.3'
)
works fine on the new fast Windows machine and underline Java 8
stuff by red color on the old Ubuntu 18.04 laptop (however project is compiling without errors on Ubuntu).
The only two things I have changed to force it to stop underlining by red were excluding of incremental true
and dexOptions
compileOptions {
// incremental true
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
//dexOptions {
// javaMaxHeapSize "4g"
//}
in the app
- level build.gradle
.
For me none of the solutions provided worked.
This should be your last resort: -> Open .iml file of your project change the LANGUAGE_LEVEL to JDK_1_8 or whatever version you wish. -> If this didn't help, you should grep "JDK" in your project root directory and find the file which contains version setting and set it to your preferred version.
this answers not working for new updated intelliJ... for new intelliJ..
Go to --> file --> Project Structure --> Global Libraries ==> set to JDK 1.8 or higher version.
also File -- > project Structure ---> projects ===> set "project language manual" to 8
also File -- > project Structure ---> project sdk ==> 1.8
This should enable lambda expression for your project.
Check below settings:
File->Project Structure->Project Tab.
*Project SDK should be set to 8 or above.*
File->Project Structure->Modules.
*Check that your or all modules has Language level set to 8 or above.*
File->Settings(or Other Settings->Preference for new projects in newer Idea version)
*Search for Java compiler and check if Project byte code version
and per module byte code version is set 8 or above.*
You problem may fall into any one of the category defined above.
As Stephen C pointed out, Eclipse Kepler (4.3) has Java 8 support when the patch is installed (installation instructions here)
Once installed, you’ll need to tell your projects to use java 8. First add the JDK to eclipse:
Then tell the project to use JDK 1.8:
This solution works in Android Studio 3.0 or later.
Change both of Source Compatibility
and Target Compatibility
to 1.8
You can also configure it directly in the corresponding build.gradle file
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
}
}
Even after applying above defined project specific settings on IntelliJ as well as Eclipse, it was still failing for me !
what worked for me was addition of maven plugin with source and target with 1.8 setting in POM XML:
<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>
Using: IntelliJ IDEA 2017.1.4 Build #IU-171.4694.23
Changing the language level via the Project Settings / Project tab didn't do anything. Instead hitting Alt + Enter and selecting "Set language level to 8 - Lambdas, type annotations etc." and it resolved automatically.
To have support of Ecplise for lambda expressions :
In intellij 14, following settings worked for me. Intellij14 Settings
Source: Stackoverflow.com