Открытие и запуск Gradle-проекта Spring Boot в IntelliJ IDEA
На этой странице
При открытии проекта Spring Boot в IntelliJ сначала проверьте синхронизацию Gradle и сравните сборку Wrapper с запуском IDE. Отсутствие кнопки запуска не всегда требует ручной конфигурации. Корректный Java main также можно запустить через значок на полях редактора.
Руководство продолжает пример Initializr с Boot 4.1.2, Gradle 9.8.2 и Java 17. Сборка и HTTP-поведение проверены локально; шаги IDE сверены с документацией JetBrains. Это не утверждение о практической проверке интерфейса конкретного выпуска IDE.
Порядок обработки
Используйте сборку Wrapper, чтобы отличить ошибки проекта от настройки IDE. HTTP-тесты используют случайный порт; ручной bootRun — настроенный.
Проверьте проект и JDK
- Через File → Open откройте корень распакованного проекта с
settings.gradleиbuild.gradle. - Завершите синхронизацию Gradle. Сначала устраните ошибки загрузки зависимостей или синхронизации.
- Выберите дистрибутив Wrapper проекта, затем проверьте Gradle JVM и Project SDK. Здесь оба используют JDK 17.
- Выполните
./gradlew --versionи./gradlew testв терминале, чтобы получить результат вне IDE.
См. руководство интеграции Gradle и правила выбора Gradle JVM. Названия меню зависят от версии IDE и ОС. Project SDK, JVM для Gradle, Java toolchain и JRE конфигурации запуска — разные настройки, не всегда автоматически совпадающие.
Добавьте эндпоинт и настоящие HTTP-тесты
Сохраните четыре существующих файла и добавьте эти два. Контроллер в пакете приложения example.demo остаётся в области сканирования компонентов.
src/main/java/example/demo/GreetingController.java
package example.demo;
import java.util.Map;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GreetingController {
@GetMapping("/greeting")
public Map<String, String> greeting() {
return Map.of("message", "Hello, Gradle");
}
}
src/test/java/example/demo/GreetingHttpTest.java
package example.demo;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.env.Environment;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class GreetingHttpTest {
@Autowired Environment environment;
HttpResponse<String> get(String path) throws Exception {
String port = environment.getRequiredProperty("local.server.port");
var request = HttpRequest.newBuilder(URI.create("http://127.0.0.1:" + port + path))
.timeout(Duration.ofSeconds(10)).GET().build();
return HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
}
@Test
void greetingReturnsJson() throws Exception {
var response = get("/greeting");
assertEquals(200, response.statusCode());
assertTrue(response.headers().firstValue("content-type").orElse("").contains("application/json"));
assertEquals("{\"message\":\"Hello, Gradle\"}", response.body());
}
@Test
void missingPathIsNotAnApplicationStartupFailure() throws Exception {
assertEquals(404, get("/missing").statusCode());
}
}
Теперь ./gradlew test выполняет существующий контекстный тест и два HTTP-теста. HTTP-тесты запускают настоящий сервер на случайном порту и проверяют JSON и ответ 404 отсутствующего пути. Свободный локальный порт 8080 им не требуется.
Сравните запуск через Gradle и Application
Запустите сервер первой командой, затем выполните вторую в другом терминале.
./gradlew bootRun --args='--server.port=8081'
curl --fail --show-error http://localhost:8081/greeting
{"message":"Hello, Gradle"}
В IDE сначала попробуйте значок запуска рядом с DemoApplication.main(). Если нужна явная конфигурация, создайте Application через Run → Edit Configurations и проверьте значения.
| Настройка | Пример |
|---|---|
| Main class | example.demo.DemoApplication |
| Classpath module | Основной исходный модуль проекта, например demo.main |
| JRE | JDK 17 |
| Program arguments | --server.port=8081 |
Если процесс уже занимает 8081, остановите его или выберите другой порт. Наличие специальных окон или конфигураций Boot не связано напрямую с запуском обычной конфигурации Java Application.
| Наблюдение | Что проверить сначала |
|---|---|
| Сборка Wrapper тоже падает | Совместимость JDK/Gradle, зависимости и ошибки исходного кода |
| Wrapper проходит, IDE падает | Перезагрузка Gradle, classpath модуля, JRE запуска и аргументы |
Сервер запускается, но /greeting возвращает 404 |
Пакет контроллера и путь mapping |
| Ошибка занятого порта | Существующие процессы и экземпляры запуска |
Если компиляция успешна, но IDE помечает сгенерированные методы как ошибки, перейдите к проверкам Lombok и процессора аннотаций.
Обсуждение