#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
:
Наконец, увидев сообщения о 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>
пары тегов.