Ванильное приложение SpringBoot работает в IntelliJ, но «компиляция mvn» завершается с ошибкой

#spring #spring-boot #maven #intellij-idea #maven-compiler-plugin

#spring #spring-boot #maven #intellij-идея #maven-compiler-plugin

Вопрос:

Когда я создаю ванильное приложение SpringBoot с помощью опции SpringBoot initializr в IntelliJ, создается простой DemoApplication.java файл:

 package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
    
@SpringBootApplication
public class DemoApplication {
  
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
    
}
  

Когда я запускаю main из IntelliJ, кажется, что он работает просто отлично (не то, чтобы он много делал прямо сейчас):

  .   ____          _            __ _ _
 /\ / ___'_ __ _ _(_)_ __  __ _    
( ( )___ | '_ | '_| | '_ / _` |    
 \/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |___, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.4.RELEASE)

2020-09-20 13:03:52.377  INFO 7456 --- [           main] com.example.demo.DemoApplication         : Starting DemoApplication on DESKTOP-5MKKIB9 with PID 7456 (C:Usersjasonfilcodedemotargetclasses started by jasonfil in C:Usersjasonfilcodedemo)
2020-09-20 13:03:52.377  INFO 7456 --- [           main] com.example.demo.DemoApplication         : No active profile set, falling back to default profiles: default
2020-09-20 13:03:52.824  INFO 7456 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 0.75 seconds (JVM running for 1.446)

Process finished with exit code 0
  

но когда я пытаюсь запустить mvn compile из командной строки, я получаю сообщение о том, что моя компиляция не соответствует номиналу:

 C:Usersjasonfilcodedemo>mvn compile
[INFO] Scanning for projects...
[INFO]
[INFO] --------------------------< com.example:demo >--------------------------
[INFO] Building demo 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ demo ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ demo ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to C:Usersjasonfilcodedemotargetclasses
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
[INFO] 1 error
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.096 s
[INFO] Finished at: 2020-09-20T13:57:26-04:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project demo: Compilation failure
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
[ERROR]
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
'cmd' is not recognized as an internal or external command,
operable program or batch file.
  

IntelliJ предоставил мне базовый pom.xml , и я его не трогал:

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>11</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

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

</project>
  

Я работаю над проектом, для которого требуется JDK Amazon Java 11 Corretto. Учитывая, что проект создается и запускается, у меня создается впечатление, что JDK просматривается просто отлично. Я также пытался использовать Oracle JDK 14, но безуспешно. Вот спецификация IntelliJ в разделе Project Structure :

Просмотр Amazon Corretto JDK изнутри IntelliJ

Наконец, увидев сообщения о maven-compiler-plugin , я также добавил

   <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
  </dependency>
  

для моего pom . Там тоже не повезло, после обновления maven, очистки и повторной компиляции. Есть идеи?

Комментарии:

1. Вы пробовали то, что описано здесь ? release свойства и Module Settings

2. Вы должны установить местоположение JDK через переменную среды JAVA_HOME, о которой [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK? уже говорилось в ошибке. Кроме того, предоставление плагина в качестве зависимости просто неверно.

3. Спасибо, это сработало. Однако я должен сказать, что Maven Central склонен не соглашаться с плагином. Они хотят, чтобы оно было обернуто вокруг <dependency> пары тегов.