pom을 다시로드 할 때마다 IntelliJ IDEA를 중지하여 Java 언어 레벨을 전환하거나 기본 프로젝트 언어 레벨을 변경하십시오.


145

IntelliJ 12를 사용하여 Java 프로젝트가 있으며 pom.xml과 함께 maven을 사용합니다. 내 프로젝트에서 java8을 사용하고 있지만 프로젝트를 가져 오는 동안 기본 프로젝트 언어 레벨이 6으로 설정된 것 같습니다.

언어 수준을 8.0 (F4-> 모듈-> 언어 수준)으로 변경할 수 있지만 pom.xml을 편집 할 때마다 프로젝트 수준이 "프로젝트 언어 수준 사용"으로 다시 전환되며이 설정을 다시 편집해야합니다. 다시.

기본 언어 수준을 8.0으로 설정하기 위해 pom.xml에 추가해야 할 것이 있습니까?


2
pom이 컴파일러 플러그인 구성에서 소스 및 대상 레벨을 지정합니까?
Mark Rotteveel

예, 소스 및 대상이 1.8로 설정되었습니다. 그러나 프로젝트 가져 오기 중에 지정되지 않았습니다
Quentin

@Quentin 이러한 상황에서 프로젝트를 새로운 위치에 복제하고 IntelliJ가 새로운 위치로 가져 오는 것이 가장 쉬운 방법 일 수 있습니다.
Thorbjørn Ravn Andersen

답변:


174

Mark의 의견에 따라 다음과 같이하십시오.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

10
플러그인은 pom, wuth 1.8 대상에 있지만 아무것도 변경하지 않습니다 :(
Quentin

2
maven pom을 자동으로 가져 왔습니까? 부모 (및 조부모) 폼을 확인 했습니까? 충돌 할 수있는 1.6 설정이 있습니까?
vikingsteve

1
실제로 상위 프로젝트는 spring-boot-starter-parent-1.1.9.RELEASE.pom.xml로 정의되고 pluginManagement에서 maven-compiler-plugin이 1.6으로 설정되었습니다 ...이 설정을 성공하지 않고 무시하려고했습니다. 스프링 부트 1.2.RC에 더 이상 maven-compiler-plugin이 포함되어 있지 않은 것 같습니다. -자동 가져 오기가 활성화되었습니다.
Quentin

대단한 이유 일 수 있습니다. 동일한 버전의 maven 컴파일러 플러그인을 지정하면 소스 / 대상 설정을 무시할 수 있습니다. 아마도 프로젝트 루트 pom.xml에서 시도해보십시오.
vikingsteve

2
제 경우에는 작동하지 않았습니다. : 나는이 답변에 언급 된 설정을 제거하고 대신에 다음을 추가했다<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
genonymous

99

vikingsteve의 대답의 짧은 버전은 다음과 같습니다.

<properties>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
</properties>

6
하나의 성가신 적은!
Artur Cichosz

4
이것은 짧은 버전이 아니라 필자의 경우 필요한 버전이었습니다. vikingsteve의 답변이 효과가 없었습니다. 그래서 그 설정을 제거하고 이것을 사용했습니다.
동의어

23

필자는 이것이 Maven 컴파일러 플러그인과 IntelliJ 아이디어의 개념적 충돌과 관련이 있다고 생각합니다. 분명히 최신 버전의 컴파일러 플러그인은 기본 수준이 1.5입니다 ( http://maven.apache.org/plugins/maven-compiler-plugin/ 참조 ). 따라서 컴파일러 플러그인이 프로젝트에서 전혀 사용되지 않고 컴파일러 레벨이 pom.xml에 명시 적으로 설정되지 않은 경우 POM이 재 처리 될 때마다 레벨이 기본값으로 돌아갑니다.

따라서 Intellij IDEA에서 무시되는 개념적 충돌이 있습니다. IDE는 여전히 프로젝트 및 모듈 설정을 설정할 수 있지만이 설정이 pom.xml에 의해 제어된다는 경고 나 피드백을 제공하지 않습니다. 솔루션은 명시 적으로 POM 컴파일러 플러그인 설정을 무시하도록 허용하거나 (명령 행에서 maven을 사용할 때 발생하는 상황 때문에 현명하지 않을 수도 있음) POM의이 설정이 적용되는 경우 IDE의 컨트롤을 비활성화하는 것입니다.

현재 해결책은 모듈 설정에서 설정하지 않고 pom의 컴파일러 플러그인에서 원하는 가져 오기 레벨을 다시 가져 오는 것입니다.


1
동의했다. IDEA의 설정을 무시하고 POM에서 다시 가져 오는 피드백이 없기 때문에 특히 상위 POM을 사용할 때 매우 혼란스러워집니다.
Gillfish

9

JDK 8에서 JDK 10+로 프로젝트를 업그레이드하고 있습니다. 다음과 같이 컴파일러 속성을 올바르게 지정했습니다.

<properties>
  <maven.compiler.source>10</maven.compiler.source>
  <maven.compiler.target>10</maven.compiler.target>
</properties>

그러나 아이디어 프로젝트는 계속해서 언어 수준을 8로 재설정합니다.

결국 Idea 's Maven 가져 오기 프로세스에서 JDK 8을 사용하여 언어 레벨을 <= 8로 제한하는 프로젝트를 가져오고 있음을 알았습니다.

수정하려면 설정-> 빌드, 실행, 배포-> 빌드 도구-> Maven-> 가져 오기에서 '가져 오기 용 JDK'속성을 업데이트하여 JDK 11을 사용하십시오.

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


내 문제를 해결했습니다. IntelliJ가 내부 릴리스를 2019 년 2 월경 이후 릴리스로 업데이트 한 것 같습니다. ... 추적하기 꽤 힘든
하산 빈 라덴

8

이를 수행하는 두 가지 방법이 있습니다. pom.xml 파일에 두 가지 중 하나를 추가하십시오.

첫 번째 속성 추가

<properties>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
</properties>

둘째-플러그인 추가

<plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
</plugin>

도움이되는지 알려주세요.


나는이 두 가지를 모두 수행했으며 IntelliJ 내에서 mvn compile을 실행할 때마다 컴파일러는 여전히 1.5로 재설정됩니다. 그러나 IntelliJ 외부의 명령 줄에서 실행할 때 제대로 작동합니다.
user26270

1
IntelliJ에서 수정 후 maven 설정을 다시 가져와야합니다. 해결책이 저에게 효과적이었습니다.
Pierluigi Vernetto

4

내 경우에는 어떤 해결책도 도움이되지 않았습니다. 내에서 Java 버전을 지정할 필요가 없었습니다 pom.xml.

<project-name>.iml파일 을 열고 JDK 버전을 변경해야했습니다.

실물:

<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

업데이트 :

<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

이것은 전혀 의미가 없습니다. Java 1.5 용 JDK 버전을 지정하지 않았습니다.


이는 자체적으로 또는 다른 곳에서 변경하지 않아도 IntelliJ 2019.3에서 문제를 해결했습니다. 마찬가지로 JDK 1.5를 어디에서나 지정하지 않았습니다.
Michael Christoff

예 : <... LANGUAGE_LEVEL = "JDK_11">
Daniel De León

1

Dropwizard로 마이크로 서비스를 구축했기 때문에이 문제로 많은 어려움을 겪었습니다. 결국 나는 잘못된 pom 파일 에 빌드 속성이 있음을 알았습니다 (주요 서비스pom.xml )에 .

다른 패키지는 라이브러리 와 비슷하지만 Java 8 구문을 사용할 수 없었습니다.

빌드 플러그인을 "전역"으로 리팩터링했을 때 .pom.xml "파일 모든 하위 컨테이너가 새 구문을 사용할 수있었습니다.

여러 컨테이너 프로젝트에 문제가있는 사람을 도울 수 있음


0

나에게 POM (플러그인 + 속성)을 필요한 Java 컴파일러 버전 (필자의 경우 1_7)으로 업데이트하는 솔루션이 효과가있었습니다. 그러나 각 프로젝트의 .iml 파일은 원래 pom (위의 누군가가 설명하는 기본 컴파일러 버전 1_5)으로 JDK 버전 1_5를 사용하여 생성되었으므로 여전히 pom 버전을 재정의합니다.

.idea 폴더를 수동으로 삭제하고 업데이트 된 pom에서 다시 가져 오기하여 모듈을 IntelliJ로 가져 왔습니다. 업데이트 된 POM에서 모듈을 다시 가져 왔을 때 iml 파일에 업데이트 된 JDK 버전 (내 경우에는 1_7)이 있음을 알 수있었습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.