Não foi possível compilar um projeto Java 10 / Java 11 simples com o Maven

134

Eu tenho um projeto trivial do 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>

Quando eu construo o projeto via mvn -X install -DskipTests=true, ele falha:

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

Existe uma maneira de corrigir isso?

ZhekaKozlov
fonte
1
@MikhailKholodkov O bug foi resolvido e agora é possível fazer uso do maven-compiler-plugin:3.8.0para corrigir o erro acima .
Naman

Respostas:

162

A partir de 30 de julho de 2018, para corrigir o problema acima, é possível configurar a versão java usada no maven para qualquer JDK / 11 e utilizá-la maven-compiler-plugin:3.8.0para especificar uma versão de 9,10,11 sem nenhuma dependência explícita .

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

Nota : - O valor padrão para origem / destino foi aumentado de 1,5 para 1,6 com esta versão. - notas de lançamento.


Editar [30.12.2018]

De fato, você pode usar a mesma versão maven-compiler-pluginao compilar o código no JDK / 12 também.

Mais detalhes e uma configuração de amostra de como Compilar e executar um recurso de visualização do JDK com o Maven .

Naman
fonte
6
Isso só funciona imediatamente quando o maven é executado com Java 11. Se a versão Java da plataforma é, por exemplo, Java 8 (e o maven é executado com Java 8), você precisa definir uma cadeia de ferramentas maven.apache.org/guides/mini /guide-using-toolchains.html
Franz Deschler
8
Observe que a propriedade associada é maven.compiler.release:<properties><maven.compiler.release>11</maven.compiler.release></properties>
Olivier Grégoire
@ OlivierGrégoire - Então, podemos substituir esse código pelo código que você forneceu? <properties> <maven.compiler.target> 1.8 </maven.compiler.target> <maven.compiler.source> 1.8 </maven.compiler.source> </properties>
MasterJoe
1
@ MasterJoe2 Sim, você deve conseguir fazer isso, desde que esteja atualizando para o Java-11.
Naman
136

ATUALIZAR

A resposta agora está obsoleta. Veja esta resposta .


maven-compiler-plugindepende da versão antiga do ASM, que ainda não suporta Java 10 (e Java 11). No entanto, é possível especificar explicitamente a versão correta do 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>

Você pode encontrar as últimas em https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm&core=gav

ZhekaKozlov
fonte
Você consideraria alterar a resposta aceita pela proposta no início de sua postagem?
leopal 07/07
24

Aumentar o seu maven-compiler-plugin para 3.8.0 parece ser necessário, mas não suficiente. Se você ainda estiver tendo problemas, verifique também se a variável de ambiente JAVA_HOME está definida como Java 10 (ou 11) se estiver executando a partir da linha de comandos. (A mensagem de erro recebida não informa isso.) Ou, se você estiver executando em um IDE, verifique se ele está configurado para executar o maven com seu JDK atual.

MiguelMunoz
fonte
14

Pode não ser exatamente o mesmo erro, mas eu tive um erro semelhante.

Verificar versão Java do Maven

Como o Maven também está executando o Java, verifique primeiro com qual versão o Maven está executando:

mvn --version | grep -i java 

Retorna:

Java versão 1.8.0_151, fornecedor: Oracle Corporation, tempo de execução: C: \ tools \ jdk \ openjdk1.8

Versão incompatível

Aqui acima, meu maven está fugindo Java Version 1.8.0_151. Portanto, mesmo se eu especificar o maven para compilar com 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>

Ele imprimirá logicamente este erro:

[ERRO] Falha ao executar a meta org.apache.maven.plugins: maven-compiler-plugin: 3.8.0: compile (default-compile) no projeto efa-example-commons-task: erro fatal na compilação: versão de destino inválida: 11 -> [Ajuda 1]

Como definir uma versão java específica para o Maven

A coisa lógica a fazer é definir uma versão Java mais alta para Maven (por exemplo, versão Java 11 em vez de 1.8).

O Maven utiliza a variável de ambiente JAVA_HOMEpara encontrar a versão Java a ser executada. Portanto, altere essa variável para o JDK que você deseja compilar (por exemplo, OpenJDK 11).

Verificação de sanidade

Em seguida, execute novamente mvn --versionpara garantir que a configuração foi resolvida:

mvn --version | grep -i java

rendimentos

Versão Java: 11.0.2, fornecedor: Oracle Corporation, tempo de execução: C: \ tools \ jdk \ openjdk11

O que é muito melhor e correto para compilar o código escrito com as especificações do Java 11.

KeyMaker00
fonte
1
Isso funcionou para mim, também ao usar o maven-assembly-plugin versão 3.2.0
Gérard Binkhorst
13

Especifique as versões maven.compiler.source e target.

1) Versão do Maven que suporta jdk que você usa. No meu caso, o JDK 11 e o maven 3.6.0.

2) pom.xml

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

Como alternativa, você pode especificar completamente o plug-in do compilador maven. Veja as respostas anteriores. É mais curto no meu exemplo :)

<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) reconstrua o projeto para evitar erros de compilação no seu IDE.

4) Se ainda não funcionar. No Intellij Idea, prefiro usar o terminal do que usar o terminal do SO. Em seguida, no Idea, vá para arquivo -> configurações -> ferramentas de construção -> maven. Trabalho com o maven que baixei do apache (por padrão, o Idea usa o maven incluído). Reinicie o Idea e execute mvn clean installnovamente. Verifique também se você possui as variáveis ​​de ambiente Path , MAVEN_HOME , JAVA_HOME corretas .

Eu também vi esse verso, mas não funciona.

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

Fiz alguns projetos iniciais rápidos, que reutilizo em outros projetos, sinta-se à vontade para verificar:

Yan Khonski
fonte
2

Se você estiver usando a inicialização por mola, adicione essas tags no pom.xml.

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

e

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

Você pode alterar a versão java para 11 ou 13 também na <maven.compiler.release>tag.

Basta adicionar as tags abaixo em 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>

Você pode alterar o 11 para 10, 13 e também para alterar a versão java. Estou usando o java 13, que é o mais recente. Funciona para mim.

Abhishek
fonte
0

Tudo bem, então para mim nada funcionou.
Eu estava usando a bota com hibernação. A versão de inicialização do Primavera era ~ 2.0.1 e eu continuaria recebendo esse erro e exceção de ponteiro nulo na compilação. O problema foi com o hibernate que precisava de um aumento de versão. Mas depois disso, tive alguns outros problemas que pareciam que o processador de anotações não era reconhecido, então decidi aumentar a versão 2.0.1 para a versão 2.1.7 e tudo funcionou conforme o esperado.

Você ainda precisa adicionar o plug-in acima.
Espero que ajude!

tudor
fonte