Maven으로 간단한 Java 10 / Java 11 프로젝트를 컴파일 할 수 없습니다


134

사소한 Maven 프로젝트가 있습니다.

src
└── main
    └── java
        └── module-info.java
pom.xml

pom.xml :

<groupId>org.example</groupId>
<artifactId>example</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>example</name>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <release>10</release>
            </configuration>
        </plugin>
    </plugins>
</build>

를 통해 프로젝트를 빌드 mvn -X install -DskipTests=true하면 실패합니다.

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:testCompile (default-testCompile) on project example: Execution default-testCompile of goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:testCompile failed.
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:309)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:194)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:107)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:993)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:345)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:191)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default-testCompile of goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:testCompile failed.
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:145)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
        ... 20 more
Caused by: java.lang.IllegalArgumentException
        at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        at org.codehaus.plexus.languages.java.jpms.AsmModuleInfoParser.parse(AsmModuleInfoParser.java:80)
        at org.codehaus.plexus.languages.java.jpms.AsmModuleInfoParser.getModuleDescriptor(AsmModuleInfoParser.java:54)
        at org.codehaus.plexus.languages.java.jpms.LocationManager.resolvePaths(LocationManager.java:83)
        at org.apache.maven.plugin.compiler.TestCompilerMojo.preparePaths(TestCompilerMojo.java:281)
        at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:762)
        at org.apache.maven.plugin.compiler.TestCompilerMojo.execute(TestCompilerMojo.java:176)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
        ... 21 more

이 문제를 해결하는 방법이 있습니까?


1
@MikhailKholodkov 버그가 해결되었으며 위의 오류를 해결하기 위해를 사용할maven-compiler-plugin:3.8.0 수 있습니다 .
Naman

답변:


163

2018 년 7 월 30 일 현재 위의 문제를 해결하기 위해 maven 내에서 사용되는 Java 버전을 최대 JDK / 11까지 구성하고 명시 적 종속성없이maven-compiler-plugin:3.8.0 9,10,11의 릴리스를 지정하기 위해를 사용할 수 있습니다 .

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <release>11</release>  <!--or <release>10</release>-->
    </configuration>
</plugin>

참고 :-이 버전에서는 소스 / 대상의 기본값이 1.5에서 1.6으로 상승했습니다. - 릴리즈 노트.


[30.12.2018] 수정

실제로 maven-compiler-pluginJDK / 12에 대해 코드를 컴파일하는 동안 동일한 버전을 사용할 수 있습니다.

자세한 내용과 방법의 샘플 구성 컴파일 및 메이븐와 JDK 미리보기 기능을 실행합니다 .


6
이것은 maven이 Java 11로 실행될 때만 즉시 작동합니다. 플랫폼 Java 버전이 Java 8 (예 : Java 8로 실행되는 경우) 인 경우 maven.apache.org/guides/mini
Franz Deschler

8
관련 자산은 maven.compiler.release다음 과 같습니다.<properties><maven.compiler.release>11</maven.compiler.release></properties>
Olivier Grégoire

@ OlivierGrégoire-그래서 우리는이 코드를 당신이 준 코드로 대체 할 수 있습니까? <properties> <maven.compiler.target> 1.8 </maven.compiler.target> <maven.compiler.source> 1.8 </maven.compiler.source> </ properties>
MasterJoe

1
@ MasterJoe2 그렇습니다. Java-11로 업그레이드 할 때 가능합니다.
Naman

136

최신 정보

대답은 이제 더 이상 사용되지 않습니다. 이 답변을 참조하십시오 .


maven-compiler-pluginJava 10 (및 Java 11)을 아직 지원하지 않는 이전 버전의 ASM에 따라 다릅니다. 그러나 올바른 ASM 버전을 명시 적으로 지정할 수 있습니다.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.7.0</version>
    <configuration>
        <release>10</release>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm</artifactId>
            <version>6.2</version> <!-- Use newer version of ASM -->
        </dependency>
    </dependencies>
</plugin>

https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm&core=gav 에서 최신 버전을 찾을 수 있습니다.


수락 된 답변을 게시물 시작 부분에 제안 된 답변으로 변경 하시겠습니까?
레오 팔

24

maven-compiler-plugin을 3.8.0으로 올리는 것이 필요하지만 충분하지 않은 것 같습니다. 여전히 문제점이있는 경우 명령 행에서 실행중인 경우 JAVA_HOME 환경 변수가 Java 10 (또는 11)으로 설정되어 있는지 확인해야합니다. (오류 메시지가 표시되지 않습니다.) 또는 IDE에서 실행중인 경우 현재 JDK에서 maven으로 실행되도록 설정되어 있는지 확인해야합니다.


14

정확히 같은 오류는 아니지만 비슷한 오류가 발생했습니다.

Maven Java 버전 확인

Maven도 Java로 실행되므로 Maven이 실행중인 버전을 먼저 확인하십시오.

mvn --version | grep -i java 

다음을 반환합니다.

Java 버전 1.8.0_151, 공급 업체 : Oracle Corporation, 런타임 : C : \ tools \ jdk \ openjdk1.8

호환되지 않는 버전

여기 내 maven이 실행 중입니다 Java Version 1.8.0_151. 그래서 내가 컴파일하도록 maven을 지정하더라도 Java 11:

<properties>
    <java.version>11</java.version>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
</properties>

이 오류를 논리적으로 인쇄합니다.

[오류] efa-example-commons-task 프로젝트에서 org.apache.maven.plugins : maven-compiler-plugin : 3.8.0 : compile (기본 컴파일) 목표를 실행하지 못했습니다. 치명적인 오류 컴파일 : 잘못된 대상 릴리스 : 11 -> [도움말 1]

특정 Java 버전을 Maven으로 설정하는 방법

논리적으로해야 할 일은 더 높은 Java 버전을 Maven으로 설정하는 것입니다 (예 : Java 버전 11 대신 1.8).

Maven은 환경 변수 JAVA_HOME를 사용 하여 실행할 Java 버전을 찾습니다. 따라서이 변수를 컴파일하려는 JDK로 변경하십시오 (예 : OpenJDK 11).

위생 점검

그런 다음 다시 실행 mvn --version하여 구성이 처리되었는지 확인하십시오.

mvn --version | grep -i java

수확량

Java 버전 : 11.0.2, 공급 업체 : Oracle Corporation, 런타임 : C : \ tools \ jdk \ openjdk11

Java 11 사양으로 작성된 코드를 컴파일하는 것이 훨씬 좋고 정확합니다.


1
이것은 maven-assembly-plugin 버전 3.2.0을 사용할
때도 효과적이었습니다.

13

maven.compiler.source 및 대상 버전을 지정하십시오.

1) 사용하는 jdk를 지원하는 Maven 버전. 필자의 경우 JDK 11 및 maven 3.6.0입니다.

2) pom.xml

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

대안으로 maven 컴파일러 플러그인을 완전히 지정할 수 있습니다. 이전 답변을 참조하십시오. 내 예에서는 더 짧습니다 :)

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <release>11</release>
            </configuration>
        </plugin>
    </plugins>
</build>

3) IDE에서 컴파일 오류를 피하기 위해 프로젝트를 다시 빌드하십시오.

4) 여전히 작동하지 않는 경우. Intellij Idea에서는 OS의 터미널을 사용하는 대신 터미널을 사용하는 것이 좋습니다. 그런 다음 Idea에서 파일-> 설정-> 빌드 도구-> maven으로 이동하십시오. 아파치에서 다운로드 한 maven으로 작업합니다 (기본적으로 Idea는 번들 maven을 사용합니다). Idea를 다시 시작한 후 mvn clean install다시 실행 하십시오. 또한 올바른 Path , MAVEN_HOME , JAVA_HOME 이 있는지 확인하십시오 환경 변수 .

나는 또한 하나의 라이너를 보았지만 작동하지 않습니다.

<maven.compiler.release>11</maven.compiler.release>

나는 다른 프로젝트에서 재사용 할 수있는 빠른 시작 프로젝트를 만들었습니다.


2

스프링 부트를 사용하는 경우 pom.xml에이 태그를 추가하십시오.

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    `<maven.compiler.release>`10</maven.compiler.release>
</properties>

<maven.compiler.release>태그 에서 Java 버전을 11 또는 13으로 변경할 수 있습니다 .

pom.xml에 아래 태그를 추가하십시오.

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.release>11</maven.compiler.release>
</properties>

11에서 10, 13을 변경하고 Java 버전을 변경할 수 있습니다. 최신 Java 13을 사용하고 있습니다. 그것은 나를 위해 작동합니다.


0

좋아, 나에게는 아무것도 효과가 없었다.
나는 봄 부츠 사용 하고 있었다.최대 절전 모드에서 . 스프링 부트 버전은 ~ 2.0.1이었고 컴파일 시이 오류와 null 포인터 예외가 계속 발생합니다. 문제는 최대 절전 모드에서 버전 충돌이 필요했습니다. 그러나 그 후 주석 프로세서가 인식되지 않는 것처럼 보이는 다른 문제가 있었으므로 2.0.1에서 2.1.7- 릴리스로 스프링을 충돌하기로 결정하고 모든 것이 예상대로 작동했습니다.

여전히 위의 플러그인을 추가해야합니다
.

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