[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-sovremennaya-razrabotka-web-kak-initsializirovat-sovremennyy-java-proekt":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":20,"progress":21,"seo":22},1187,"kak-initsializirovat-sovremennyy-java-proekt",37,"sovremennaya-razrabotka-web","Современная разработка WEB","🌐","Как инициализировать современный Java-проект?","Инициализация современного Java-проекта начинается с выбора Java 21 LTS, Spring Boot 3.x и системы сборки Gradle с Kotlin DSL.\n\n### Ключевые возможности Java 21+\n\n\u003Cdetails>\n\u003Csummary>Примеры возможностей Java 21\u003C\u002Fsummary>\n\n```java\n\u002F\u002F Virtual Threads (Project Loom) — Java 21\ntry (var executor = Executors.newVirtualThreadPerTaskExecutor()) {\n    List\u003CFuture\u003CString>> futures = urls.stream()\n        .map(url -> executor.submit(() -> fetchData(url)))\n        .toList();\n}\n\n\u002F\u002F Pattern Matching for switch — Java 21\nString describe(Object obj) {\n    return switch (obj) {\n        case Integer i when i > 0 -> \"positive: \" + i;\n        case String s -> \"string: \" + s;\n        case null -> \"null value\";\n        default -> \"unknown: \" + obj;\n    };\n}\n\n\u002F\u002F Record Patterns — Java 21\nrecord Point(int x, int y) {}\nrecord Line(Point start, Point end) {}\n\nvoid printLength(Object obj) {\n    if (obj instanceof Line(Point(var x1, var y1), Point(var x2, var y2))) {\n        double length = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n        System.out.println(\"Length: \" + length);\n    }\n}\n\n\u002F\u002F Sequenced Collections — Java 21\nSequencedCollection\u003CString> list = new ArrayList\u003C>();\nlist.addFirst(\"first\");\nlist.addLast(\"last\");\nString first = list.getFirst();\n```\n\n\u003C\u002Fdetails>\n\n### Spring Boot 3.x стартер с Gradle\n\n\u003Cdetails>\n\u003Csummary>build.gradle.kts\u003C\u002Fsummary>\n\n```kotlin\nplugins {\n    java\n    id(\"org.springframework.boot\") version \"3.4.1\"\n    id(\"io.spring.dependency-management\") version \"1.1.7\"\n}\n\ngroup = \"com.example\"\nversion = \"0.0.1-SNAPSHOT\"\n\njava {\n    toolchain {\n        languageVersion = JavaLanguageVersion.of(21)\n    }\n}\n\nrepositories {\n    mavenCentral()\n}\n\ndependencies {\n    implementation(\"org.springframework.boot:spring-boot-starter-web\")\n    implementation(\"org.springframework.boot:spring-boot-starter-data-jpa\")\n    implementation(\"org.springframework.boot:spring-boot-starter-validation\")\n    implementation(\"org.springframework.boot:spring-boot-starter-actuator\")\n    implementation(\"org.springframework.boot:spring-boot-starter-security\")\n\n    runtimeOnly(\"org.postgresql:postgresql\")\n    runtimeOnly(\"io.micrometer:micrometer-registry-prometheus\")\n\n    compileOnly(\"org.projectlombok:lombok\")\n    annotationProcessor(\"org.projectlombok:lombok\")\n\n    testImplementation(\"org.springframework.boot:spring-boot-starter-test\")\n    testImplementation(\"org.springframework.security:spring-security-test\")\n    testImplementation(\"org.testcontainers:junit-jupiter\")\n    testImplementation(\"org.testcontainers:postgresql\")\n}\n\ntasks.withType\u003CTest> {\n    useJUnitPlatform()\n}\n```\n\n\u003C\u002Fdetails>\n\n### Структура проекта (гексагональная архитектура)\n\nГексагональная (порты и адаптеры) архитектура изолирует бизнес-логику от инфраструктуры:\n\n```\norder-service\u002F\n├── src\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002Forder\u002F\n│   ├── domain\u002F                    # Ядро (нет зависимостей на фреймворки)\n│   │   ├── model\u002F                 # Entity, Value Object, Enum\n│   │   ├── port\u002Fin\u002F               # Входные порты (use cases)\n│   │   ├── port\u002Fout\u002F              # Выходные порты (SPI)\n│   │   ├── service\u002F               # Реализация use cases\n│   │   └── exception\u002F\n│   ├── adapter\u002F                   # Адаптеры (инфраструктура)\n│   │   ├── in\u002Fweb\u002F                # REST контроллеры, DTO, mapper\n│   │   ├── in\u002Fkafka\u002F              # Kafka consumers\n│   │   └── out\u002F                   # JPA, внешние сервисы, messaging\n│   └── config\u002F                    # Конфигурация Spring\n├── src\u002Fmain\u002Fresources\u002F\n│   ├── application.yml\n│   ├── application-local.yml\n│   └── db\u002Fmigration\u002F              # Flyway миграции\n```\n\n### Gradle vs Maven в 2026\n\n| Критерий | Gradle | Maven |\n|----------|--------|-------|\n| Build cache | Инкрементальная компиляция, build cache | Нет нативного build cache |\n| DSL | Kotlin DSL с типобезопасностью | XML |\n| Multi-module | Гибкость для сложных проектов | Конвенция над конфигурацией |\n| Популярность | Основной для новых проектов | Legacy и enterprise со стандартизацией |\n\n### Spring Initializr\n\n```bash\ncurl https:\u002F\u002Fstart.spring.io\u002Fstarter.zip \\\n  -d type=gradle-project \\\n  -d language=java \\\n  -d bootVersion=3.4.1 \\\n  -d javaVersion=21 \\\n  -d groupId=com.example \\\n  -d artifactId=order-service \\\n  -d dependencies=web,data-jpa,postgresql,security,actuator,validation \\\n  -o order-service.zip\n```\n\n### Частые ошибки\n\n- Использование Java 8 или 11 в новых проектах — нет причин не использовать Java 21\n- Структурирование по техническим слоям (controllers\u002F, services\u002F) вместо доменных модулей\n- Смешивание DTO и доменных моделей: JPA-сущность не должна возвращаться напрямую из REST API\n- Отсутствие файлов профилей (application-local.yml, application-prod.yml)\n\n> **На собеседовании:** покажите, что знаете актуальные версии (Java 21, Spring Boot 3.x) и умеете обосновать структуру проекта. Частый вопрос: \"Зачем гексагональная архитектура, а не трёхслойная?\" Ответ: для простых CRUD трёхслойная подходит, для сложного домена гексагональная изолирует бизнес-логику от инфраструктуры.","","junior",[15,16,17,18,19],"gradle","hexagonal-architecture","spring-boot","java-21","spring-initializr",[],null,{"title":23,"description":24,"ogTitle":23,"ogDescription":25,"keywords":26,"schemaAnswer":35,"featuredSnippetReady":36},"Как инициализировать современный Java-проект — Gymterview","Инициализация Java-проекта в 2026: Java 21, Spring Boot 3.x, Gradle Kotlin DSL, гексагональная архитектура. Spring Initializr, структура проекта, частые ошибки.","Java 21 + Spring Boot 3.x + Gradle: инициализация проекта, гексагональная архитектура, частые ошибки при старте.",[27,28,29,30,31,32,33,34],"инициализация Java-проекта","Spring Initializr","Gradle Kotlin DSL","Java 21","гексагональная архитектура","Spring Boot 3","структура проекта","собеседование","Инициализация начинается с Java 21 LTS, Spring Boot 3.x и Gradle с Kotlin DSL. Используйте Spring Initializr для генерации проекта. Структура: гексагональная архитектура (порты и адаптеры) для изоляции бизнес-логики от инфраструктуры. Ключевые возможности Java 21: Virtual Threads, Pattern Matching for switch, Record Patterns, Sequenced Collections.",true]