У меня тривиальный проект Maven:

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

pom.xml:

org.example
example
1.0-SNAPSHOT
jar
example


    
        
            org.apache.maven.plugins
            maven-compiler-plugin
            3.7.0
            
                10
            
        
    

Когда я создаю проект с помощью 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.(Unknown Source)
        at org.objectweb.asm.ClassReader.(Unknown Source)
        at org.objectweb.asm.ClassReader.(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

Есть способ исправить это?

Ответы (9)

По состоянию на 30 июля 2018 г., чтобы исправить указанную выше проблему, можно настроить версию java, используемую в maven, на любую до JDK / 11 и использовать maven-compiler-plugin: 3.8.0, чтобы указать выпуск 9,10,11 без каких-либо явных зависимостей.


    org.apache.maven.plugins
    maven-compiler-plugin
    3.8.0
    
        11  
    

Примечание: - В этой версии значение по умолчанию для источника / цели было увеличено с 1,5 до 1,6. - примечания к выпуску.


Редактировать [30.12.2018]

Фактически, вы можете использовать ту же версию maven-compiler-plugin при компиляции кода для JDK / 12.

Дополнительные сведения и пример конфигурации в Компиляция и выполнение функции предварительного просмотра JDK с помощью Maven.

ОБНОВЛЕНИЕ

The answer is now obsolete. See this answer.


maven-compiler-plugin зависит от старой версии ASM, которая еще не поддерживает Java 10 (и Java 11). Однако можно явно указать правильную версию ASM:


    org.apache.maven.plugins
    maven-compiler-plugin
    3.7.0
    
        10
    
    
        
            org.ow2.asm
            asm
            6.2 
        
    

Последние можно найти по адресу https://search.maven.org/search?q=g: org.ow2.asm% 20AND% 20a: asm & core = gav

Если вы используете весеннюю загрузку, добавьте эти теги в pom.xml.


    org.springframework.boot
    spring-boot-maven-plugin

и


    UTF-8
    UTF-8
    ``10

Вы также можете изменить версию java на 11 или 13 в теге .

Просто добавьте теги ниже в pom.xml


    UTF-8
    UTF-8
    11

Вы можете изменить 11 на 10, 13, а также изменить версию java. Я использую последнюю версию java 13. У меня работает.

Укажите исходную и целевую версии maven.compiler.

1) Версия Maven, которая поддерживает используемый вами jdk. В моем случае JDK 11 и maven 3.6.0.

2) pom.xml


    11
    11

В качестве альтернативы вы можете полностью указать плагин компилятора maven. См. Предыдущие ответы. В моем примере он короче :)


    
        
            org.apache.maven.plugins
            maven-compiler-plugin
            3.8.0
            
                11
            
        
    

3) пересоберите проект, чтобы избежать ошибок компиляции в вашей IDE.

4) Если все равно не работает. В Intellij Idea я предпочитаю использовать терминал вместо терминала из ОС. Затем в Idea перейдите в файл -> настройки -> инструменты сборки -> maven. Я работаю с maven, скачанным с apache (по умолчанию Idea использует связанный maven). Затем перезапустите Idea и снова запустите mvn clean install. Также убедитесь, что у вас есть правильные Путь, MAVEN_HOME, JAVA_HOME переменные среды.

Я тоже видел этот однострочник, но он не работает.

11

Я сделал несколько быстрых стартовых проектов, которые я повторно использую в других своих проектах, не стесняйтесь проверить:

Это может быть не совсем та же ошибка, но у меня была похожая.

Проверить версию Java Maven

Поскольку Maven также работает с Java, сначала проверьте, с какой версией работает ваш Maven:

mvn --version | grep -i java 

Возвращает:

Версия Java 1.8.0_151, производитель: Oracle Корпорация, среда выполнения: C: \ tools \ jdk \ openjdk1.8

Несовместимая версия

Здесь мой maven работает с Java Version 1.8.0_151. Поэтому, даже если я укажу maven для компиляции с Java 11:


    11
    ${java.version}
    ${java.version}

Он логически распечатает эту ошибку:

[ОШИБКА] Не удалось выполнить цель org.apache.maven.plugins: maven-compiler-plugin: 3.8.0: компилировать (компиляция по умолчанию) в проекте efa-example-commons-task: Неустранимая ошибка компиляция: недопустимый целевой выпуск: 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.

Если ничего не работает и даже после того, как вы установили JAVA_HOME на правильный путь, проверьте, нет ли переопределения пути JAVA_HOME в /.mavenrc!*100006 *

Хорошо, у меня ничего не работало.
Я использовал весеннюю загрузку с гибернацией. Версия весенней загрузки была ~ 2.0.1, и я бы продолжал получать эту ошибку и исключение нулевого указателя при компиляции. Проблема заключалась в спящем режиме, который требовал повышения версии. Но после этого у меня возникли некоторые другие проблемы, которые казались мне нераспознаваемыми, поэтому я решил просто переключить Spring с версии 2.0.1 на версию 2.1.7, и все заработало, как ожидалось.

Вам все равно нужно добавить указанный выше плагин
Надеюсь, это поможет!

Повышение уровня maven-compiler-plugin до 3.8.0 кажется необходимым, но недостаточным. Если у вас все еще возникают проблемы, вам также следует убедиться, что для переменной среды JAVA_HOME установлено значение Java 10 (или 11), если вы работаете из командной строки. (Сообщение об ошибке, которое вы получите, не скажет вам этого.) Или, если вы работаете из IDE, вам нужно убедиться, что он настроен на запуск maven с вашим текущим JDK.

В моем случае мне пришлось явно установить JAVA_HOME на JDK-11 в моем скрипте, хотя терминал показывает версию Java 11.

Это произошло потому, что я выполняю mvn через сценарий оболочки, а mvn использовал JDK по умолчанию моей машины, который был JDK8.

Я подтвердил, какая версия JDK используется mvn в скрипте и установила JDK-11, как показано ниже:

#!/bin/bash
echo $(java -version)
echo $(mvn --version | grep -i java )

export JAVA_HOME="/opt/jdk11/"
export PATH=$JAVA_HOME/bin:$PATH

echo $(java -version)
echo $(mvn --version | grep -i java )

2022 WebDevInsider