development

Java "이 언어 레벨에서 지원되지 않는 람다 표현식"

big-blog 2020. 5. 26. 19:05
반응형

Java "이 언어 레벨에서 지원되지 않는 람다 표현식"


Java 8의 새로운 기능을 테스트하고 여기에 표시된대로 예제를 내 IDE (Eclipse, 그 다음 IntelliJ)에 복사했습니다 .

Eclipse는 람다 식에 대한 지원을 제공하지 않았으며 IntelliJ는 계속 오류를보고했습니다.

이 언어 레벨에서 지원되지 않는 Lambda 표현식

이것이 설치, 코드 또는 지원에 문제가 있는지 알고 싶습니다.


IntelliJ IDEA에서 :

에서 File MenuProject StructureProject변경 Project Language Level8.0 - Lambdas, type annotations etc.

안드로이드 3.0 이상 이동에 대한 FileProject StructureModuleapp와에서 속성 탭 세트 Source CompatibilityTarget Compatibility1.8 (Java 8)

스크린 샷 :

여기에 이미지 설명을 입력하십시오


소스 탭 (모듈 부분)에서도 소스 코드 언어 레벨을 변경해야합니다.

언어 수준 변경


이 솔루션은 Android Studio 3.0 이상에서 작동합니다.

  1. 파일> 프로젝트 구조> 모듈> 앱> 속성 탭

여기에 이미지 설명을 입력하십시오

모두 변경 Source CompatibilityTarget Compatibility1.8

  1. 구성 파일 편집

해당 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

java8

모듈 언어 수준

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로 변경하십시오. 다른 것을 바꾸지 마십시오. -> 적용을 클릭하십시오

이제 gradle이 다시 동기화되고 오류가 제거됩니다.


compileOptionsbuild.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, 입력 주석 등으로 ​​업그레이드하십시오.


Language 5에서 지원되지 않는 경우 다음을 확인하십시오. (나를 위해 모듈 섹션에 있음)

Lanaguge Level 5는 지원되지 않습니다


7.0은 람다 식을 지원하지 않습니다. 언어 레벨을 8.0으로 변경하려면 이것을 앱 gradle에 추가하십시오.

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

여기에 이미지 설명을 입력하십시오


실제로 Java 8에 대한 Eclipse 지원이 사용 가능합니다 ( herehere 참조) .

  • Kepler의 경우 SR2에 대한 "기능 패치"로 제공됩니다 (예 : Eclipse 4.3.2).
  • Luna (Eclipse 4.4)의 경우 표준 릴리스에 있습니다. ( 출시 일정 )

IntelliJ IDEA 15에서 Java 8 (람다 등)으로 컴파일하려면

  • CTRL + ALT + SHIFT + S 또는 파일 / 프로젝트 구조

  • 프로젝트 탭 열기

  • 호환 가능한 Java 버전 (1.8)으로 Project SDK 설정

  • 프로젝트 언어 레벨을 8로 설정

  • 모듈 열기 탭

  • 언어 수준을 8로 설정하고 확인을 클릭하십시오.

  • CTRL + ALT + S 또는 파일 / 설정

  • 빌드, 실행, 배포 / 컴파일러 / Java 컴파일러

  • 대상 바이트 코드 버전을 1.8로 변경하고 확인을 클릭하십시오.


사용 : IntelliJ IDEA 2017.1.4 빌드 # IU-171.4694.23

프로젝트 설정 / 프로젝트 탭을 통해 언어 수준을 변경해도 아무런 효과가 없습니다. 대신 Alt+를 Enter누르고 "언어 레벨을 8로 설정-람다, 유형 주석 등"을 선택하십시오. 자동으로 해결되었습니다.


Stephen C가 지적했듯이 Eclipse Kepler (4.3)는 패치가 설치 될 때 Java 8을 지원합니다 (설치 지침은 여기 ).

설치가 완료되면 프로젝트에 java 8을 사용하도록 지시해야합니다. 먼저 일식에 JDK를 추가하십시오.

  • 창-> 환경 설정으로 이동
  • Java-> 설치된 JRE로 이동하십시오.
  • 표준 VM을 추가하고 JRE의 위치를 ​​가리 킵니다.
  • 그런 다음 컴파일러로 이동하십시오.
  • 컴파일러 준수 수준을 1.8로 설정

그런 다음 프로젝트에 JDK 1.8을 사용하도록 지시하십시오.

  • 프로젝트-> 환경 설정으로 이동하십시오.
  • Java 컴파일러로 이동
  • 프로젝트 특정 설정 사용
  • 컴파일러 준수 수준을 1.8로 설정

아래 설정을 확인하십시오.

  1. 파일-> 프로젝트 구조-> 프로젝트 탭.

    *Project SDK should be set to 8 or above.*
    
  2. 파일-> 프로젝트 구조-> 모듈.

    *Check that your or all modules has Language level set to 8 or above.*
    
  3. 파일-> 설정 (또는 다른 설정-> 최신 아이디어 버전의 새 프로젝트에 대한 환경 설정)

    *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 개의 답변과 동일) : 프로젝트 구조 설정

  1. 파일> 프로젝트 구조> 프로젝트 설정에서 프로젝트> 프로젝트 SDK 로 1.8 (버전 65 이상, 최신 버전은 112)로 설정하고 프로젝트 언어 레벨 을 8로 설정하십시오.

  2. 파일> 프로젝트 구조> 플랫폼 설정에서 프로젝트로 이동하여 JDK 홈 경로 가 1.8로 설정되어 있는지 확인하십시오 (버전 65 이상에서 최신 버전은 112 임).

위의 방법으로 문제가 해결되지 않으면 대상 바이트 코드 버전 의 컴파일러를 확인하고 가능한 원인 # 2로 이동하십시오.

가능한 원인 # 2 : 컴파일러

  1. File> Settings> Build, Execution, Deployment> Compiler에서 Java Compiler로 이동하여 프로젝트 바이트 코드 버전 과 모듈의 모든 대상 바이트 코드 버전 을 1.8로 설정하십시오 . 적용을 클릭 하고 확인을 누르 십시오 . IntelliJ IDE를 다시 시작하십시오. 이 시점에서 내 IDE에서 람다식이 허용되었습니다.

최고의 소원 :)


나에게 제공된 솔루션 중 아무것도 작동하지 않았습니다.

이것이 최후의 수단이어야합니다.-> 프로젝트의 .iml 파일 열기 LANGUAGE_LEVEL을 JDK_1_8 또는 원하는 버전으로 변경하십시오. -> 이것이 도움이되지 않으면 프로젝트 루트 디렉토리에서 "JDK"를 grep하고 버전 설정이 포함 된 파일을 찾아서 선호하는 버전으로 설정해야합니다.


Ctrl + Alt + Shift + S를 누른 다음 프로젝트에서 언어 레벨 1.8을 선택 하십시오. 여기에서 Lambda Expressions에 대한 자세한 내용을 읽으 십시오.


람다 식에 대한 Ecplise를 지원하려면 다음을 수행하십시오.

  1. JDK 1.8 (창> 환경 설정> 설치된 JRE 및 컴파일러)을 사용 중인지 확인하십시오.
  2. Eclipse가 Lambdas ( Functional Interfaces ) 와 관련된 리팩토링을 제안하도록 새 기능 인터페이스를 정의하는 경우 주석 @FunctionalInterface를 사용하십시오 .

먼저 사용중인 JDK 버전을 확인하십시오. 1.8보다 높아야합니다.

그렇다면 아래 단계를 수행하십시오.

Intellij 에서 프로젝트 및 모듈의 언어 레벨을 변경하십시오 .

계획

1. 파일-> 프로젝트 구조-> 프로젝트-> 프로젝트 언어 수준 람바식이 작동하도록 8로 변경하십시오.

2. 파일-> 프로젝트 구조-> 모듈-> 프로젝트 언어 수준 람바식이 작동하도록 8로 변경하십시오.


이것은 새로운 업데이트 된 intelliJ에서는 작동하지 않습니다 ... 새로운 intelliJ에서는 ...

-> 파일-> 프로젝트 구조-> 글로벌 라이브러리 ==>로 이동하여 JDK 1.8 이상 버전으로 설정하십시오.

또한 파일-> 프로젝트 구조 ---> 프로젝트 ===> "프로젝트 언어 매뉴얼"을 8로 설정

또한 파일-> 프로젝트 구조 ---> 프로젝트 SDK ==> 1.8

이를 통해 프로젝트에 람다 식을 사용할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/22703412/java-lambda-expressions-not-supported-at-this-language-level

반응형