Java 8의 새로운 기능을 테스트하고 여기에 표시된 것처럼 예제를 내 IDE (Eclipse, 원래 IntelliJ)에 복사했습니다 .
Eclipse는 람다 식에 대한 지원을 제공하지 않았으며 IntelliJ는 계속 오류를보고했습니다.
이 언어 레벨에서 지원되지 않는 Lambda 표현식
이것이 설치, 코드 또는 지원에 문제가 있는지 알고 싶습니다.
Java 8의 새로운 기능을 테스트하고 여기에 표시된 것처럼 예제를 내 IDE (Eclipse, 원래 IntelliJ)에 복사했습니다 .
Eclipse는 람다 식에 대한 지원을 제공하지 않았으며 IntelliJ는 계속 오류를보고했습니다.
이 언어 레벨에서 지원되지 않는 Lambda 표현식
이것이 설치, 코드 또는 지원에 문제가 있는지 알고 싶습니다.
답변:
IntelliJ IDEA에서 :
에서 File Menu
→ Project Structure
→ Project
변경 Project Language Level
에8.0 - Lambdas, type annotations etc.
안드로이드 3.0 이상 이동에 대한 File
→ Project Structure
→ Module
→ app
와에서 속성 탭 세트 Source Compatibility
및 Target Compatibility
로1.8 (Java 8)
스크린 샷 :
File Menu → Project Structure → Modules
있지만 기본적으로 프로젝트 언어 수준과 동일합니다.
android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
File
> - Project Structure
-> Module you want to support lambdas
설정하고 소스 호환성 및 대상 호환성 에 1.8
이 솔루션은 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>
변경 후 모든 것이 좋아 보인다
compileOptions
build.gradle yours 앱을 추가 하십시오.
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-Lambdas, 입력 주석 등으로 업그레이드하십시오.
IntelliJ IDEA 15에서 Java 8 (람다 등)으로 컴파일하려면
CTRL + ALT + SHIFT + S
또는 파일 / 프로젝트 구조
프로젝트 탭 열기
호환 가능한 Java 버전 (1.8)으로 Project SDK 설정
프로젝트 언어 레벨을 8로 설정
모듈 열기 탭
언어 수준을 8로 설정하고 확인을 클릭하십시오.
CTRL + ALT + S
또는 파일 / 설정
빌드, 실행, 배포 / 컴파일러 / Java 컴파일러
대상 바이트 코드 버전을 1.8로 변경하고 확인을 클릭하십시오.
Stephen C가 지적한 것처럼 Eclipse Kepler (4.3)는 패치가 설치 될 때 Java 8을 지원합니다 (설치 지침은 여기 ).
설치 한 후에는 프로젝트에 java 8을 사용하도록 지시해야합니다. 먼저 일식에 JDK를 추가하십시오.
그런 다음 프로젝트에 JDK 1.8을 사용하도록 지시하십시오.
아래 설정을 확인하십시오.
파일-> 프로젝트 구조-> 프로젝트 탭.
*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 시스템 및 밑줄 Java 8
상의 붉은 색으로 물건을 오래된 우분투 18.04 노트북 (그러나 프로젝트가 우분투에 오류없이 컴파일).
빨간색으로 밑줄을 그리지 않도록 강제로 변경 한 유일한 것은 제외 incremental true
하고dexOptions
compileOptions {
// incremental true
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
//dexOptions {
// javaMaxHeapSize "4g"
//}
의 app
수준 - build.gradle
.
intellij 14에서는 다음 설정이 효과적이었습니다. Intellij14 설정
Eclipse뿐만 아니라 IntelliJ에 위에서 정의한 프로젝트 특정 설정을 적용한 후에도 여전히 실패했습니다!
나를 위해 일한 것은 POM XML에서 1.8 설정으로 소스 및 대상이있는 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>
가능한 원인 # 1 (이 질문에 대한 처음 3 개의 답변과 동일) : 프로젝트 구조 설정
파일> 프로젝트 구조> 프로젝트 설정에서 프로젝트> 프로젝트 SDK 로 1.8 (버전 65 이상, 최신 버전은 112)로 설정하고 프로젝트 언어 레벨 을 8로 설정하십시오.
파일> 프로젝트 구조> 플랫폼 설정에서 프로젝트로 이동하여 JDK 홈 경로 가 1.8로 설정되어 있는지 확인하십시오 (버전 65 이상에서 최신 버전은 112 임).
위의 방법으로 문제가 해결되지 않으면 대상 바이트 코드 버전 의 컴파일러를 확인하고 가능한 원인 # 2로 이동하십시오.
가능한 원인 # 2 : 컴파일러
최고의 소원 :)
나에게 제공된 솔루션 중 아무것도 작동하지 않았습니다.
이것이 최후의 수단이어야합니다.-> 프로젝트의 .iml 파일 열기 LANGUAGE_LEVEL을 JDK_1_8 또는 원하는 버전으로 변경하십시오. -> 그래도 도움이되지 않으면 프로젝트 루트 디렉토리에서 "JDK"를 grep하고 버전 설정이 포함 된 파일을 찾아서 원하는 버전으로 설정해야합니다.
Ctrl + Alt + Shift + S를 누른 다음 프로젝트에서 언어 레벨 1.8을 선택 하십시오. 여기에서 Lambda Expressions에 대한 자세한 내용을 읽으 십시오.
람다 식에 대한 Ecplise를 지원하려면 다음을 수행하십시오.
먼저 사용중인 JDK 버전을 확인하십시오. 1.8보다 높아야합니다.
그렇다면 아래 단계를 수행하십시오.
Intellij 에서 프로젝트 및 모듈의 언어 레벨을 변경하십시오 .
계획
1. 파일-> 프로젝트 구조-> 프로젝트-> 프로젝트 언어 수준 람바식이 작동하도록 8로 변경하십시오.
2. 파일-> 프로젝트 구조-> 모듈-> 프로젝트 언어 수준 람바식이 작동하도록 8로 변경하십시오.