@ngxtm/devkit 3.3.0 → 3.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli/index.js +59 -13
- package/cli/rules.js +248 -0
- package/package.json +2 -1
- package/rules/README.md +141 -0
- package/rules/dart/best-practices/SKILL.md +23 -0
- package/rules/dart/language/SKILL.md +52 -0
- package/rules/dart/tooling/SKILL.md +43 -0
- package/rules/dotnet/aspnet-core/SKILL.md +92 -0
- package/rules/dotnet/aspnet-core/references/REFERENCE.md +335 -0
- package/rules/dotnet/best-practices/SKILL.md +101 -0
- package/rules/dotnet/best-practices/references/REFERENCE.md +256 -0
- package/rules/dotnet/blazor/SKILL.md +146 -0
- package/rules/dotnet/blazor/references/REFERENCE.md +392 -0
- package/rules/dotnet/language/SKILL.md +82 -0
- package/rules/dotnet/language/references/REFERENCE.md +222 -0
- package/rules/dotnet/patterns.rule.md +388 -0
- package/rules/dotnet/razor-pages/SKILL.md +124 -0
- package/rules/dotnet/razor-pages/references/REFERENCE.md +321 -0
- package/rules/dotnet/security/SKILL.md +89 -0
- package/rules/dotnet/security/references/REFERENCE.md +295 -0
- package/rules/dotnet/tooling/SKILL.md +92 -0
- package/rules/dotnet/tooling/references/REFERENCE.md +300 -0
- package/rules/flutter/auto-route-navigation/SKILL.md +43 -0
- package/rules/flutter/auto-route-navigation/references/REFERENCE.md +19 -0
- package/rules/flutter/auto-route-navigation/references/router-config.md +62 -0
- package/rules/flutter/bloc-state-management/SKILL.md +64 -0
- package/rules/flutter/bloc-state-management/references/REFERENCE.md +20 -0
- package/rules/flutter/bloc-state-management/references/auth-bloc-example.md +52 -0
- package/rules/flutter/bloc-state-management/references/equatable-usage.md +56 -0
- package/rules/flutter/bloc-state-management/references/property-based-state.md +68 -0
- package/rules/flutter/bloc.rule.md +76 -0
- package/rules/flutter/cicd/SKILL.md +48 -0
- package/rules/flutter/cicd/references/advanced-workflow.md +66 -0
- package/rules/flutter/cicd/references/fastlane.md +139 -0
- package/rules/flutter/cicd/references/github-actions.md +59 -0
- package/rules/flutter/dependency-injection/SKILL.md +42 -0
- package/rules/flutter/dependency-injection/references/REFERENCE.md +15 -0
- package/rules/flutter/dependency-injection/references/modules.md +37 -0
- package/rules/flutter/error-handling/SKILL.md +32 -0
- package/rules/flutter/error-handling/references/REFERENCE.md +19 -0
- package/rules/flutter/error-handling/references/error-mapping.md +31 -0
- package/rules/flutter/feature-based-clean-architecture/SKILL.md +46 -0
- package/rules/flutter/feature-based-clean-architecture/references/REFERENCE.md +14 -0
- package/rules/flutter/feature-based-clean-architecture/references/folder-structure.md +36 -0
- package/rules/flutter/getx-navigation/SKILL.md +70 -0
- package/rules/flutter/getx-navigation/references/app-pages.md +40 -0
- package/rules/flutter/getx-navigation/references/middleware-example.md +29 -0
- package/rules/flutter/getx-state-management/SKILL.md +76 -0
- package/rules/flutter/getx-state-management/references/binding-example.md +32 -0
- package/rules/flutter/getx-state-management/references/reactive-vs-simple.md +39 -0
- package/rules/flutter/go-router-navigation/SKILL.md +57 -0
- package/rules/flutter/idiomatic-flutter/SKILL.md +20 -0
- package/rules/flutter/layer-based-clean-architecture/SKILL.md +50 -0
- package/rules/flutter/layer-based-clean-architecture/references/REFERENCE.md +60 -0
- package/rules/flutter/layer-based-clean-architecture/references/repository-mapping.md +50 -0
- package/rules/flutter/localization/SKILL.md +50 -0
- package/rules/flutter/localization/references/REFERENCE.md +48 -0
- package/rules/flutter/localization/references/sheet-loader.md +33 -0
- package/rules/flutter/navigator-v1-navigation/SKILL.md +71 -0
- package/rules/flutter/navigator-v1-navigation/references/on-generate-route.md +48 -0
- package/rules/flutter/performance/SKILL.md +24 -0
- package/rules/flutter/retrofit-networking/SKILL.md +51 -0
- package/rules/flutter/retrofit-networking/references/REFERENCE.md +19 -0
- package/rules/flutter/retrofit-networking/references/token-refresh.md +40 -0
- package/rules/flutter/riverpod-state-management/SKILL.md +53 -0
- package/rules/flutter/riverpod-state-management/references/architecture.md +124 -0
- package/rules/flutter/riverpod-state-management/references/best-practices.md +89 -0
- package/rules/flutter/riverpod-state-management/references/testing.md +73 -0
- package/rules/flutter/riverpod.rule.md +78 -0
- package/rules/flutter/security/SKILL.md +33 -0
- package/rules/flutter/security/references/REFERENCE.md +15 -0
- package/rules/flutter/security/references/network-security.md +28 -0
- package/rules/flutter/testing/SKILL.md +44 -0
- package/rules/flutter/testing/references/REFERENCE.md +21 -0
- package/rules/flutter/testing/references/bloc-testing.md +38 -0
- package/rules/flutter/testing/references/integration-testing.md +128 -0
- package/rules/flutter/testing/references/robot-pattern.md +82 -0
- package/rules/flutter/testing/references/unit-testing.md +130 -0
- package/rules/flutter/testing/references/widget-testing.md +120 -0
- package/rules/flutter/widgets/SKILL.md +37 -0
- package/rules/golang/chi-router/SKILL.md +219 -0
- package/rules/golang/chi-router/references/REFERENCE.md +13 -0
- package/rules/golang/chi-router/references/routing-patterns.md +205 -0
- package/rules/golang/cobra-cli/SKILL.md +227 -0
- package/rules/golang/cobra-cli/references/REFERENCE.md +13 -0
- package/rules/golang/cobra-cli/references/command-patterns.md +224 -0
- package/rules/golang/core/SKILL.md +210 -0
- package/rules/golang/core/references/REFERENCE.md +14 -0
- package/rules/golang/core/references/concurrency-patterns.md +114 -0
- package/rules/golang/core/references/error-handling.md +87 -0
- package/rules/golang/echo-framework/SKILL.md +215 -0
- package/rules/golang/echo-framework/references/REFERENCE.md +14 -0
- package/rules/golang/echo-framework/references/middleware-patterns.md +141 -0
- package/rules/golang/echo-framework/references/routing-patterns.md +140 -0
- package/rules/golang/ent-orm/SKILL.md +239 -0
- package/rules/golang/ent-orm/references/REFERENCE.md +13 -0
- package/rules/golang/ent-orm/references/schema-patterns.md +255 -0
- package/rules/golang/fiber-framework/SKILL.md +196 -0
- package/rules/golang/fiber-framework/references/REFERENCE.md +13 -0
- package/rules/golang/fiber-framework/references/routing-patterns.md +191 -0
- package/rules/golang/gin-framework/SKILL.md +205 -0
- package/rules/golang/gin-framework/references/REFERENCE.md +14 -0
- package/rules/golang/gin-framework/references/middleware-patterns.md +119 -0
- package/rules/golang/gorm-orm/SKILL.md +196 -0
- package/rules/golang/gorm-orm/references/REFERENCE.md +14 -0
- package/rules/golang/gorm-orm/references/model-definitions.md +167 -0
- package/rules/golang/gorm-orm/references/query-patterns.md +161 -0
- package/rules/golang/grpc/SKILL.md +231 -0
- package/rules/golang/grpc/references/REFERENCE.md +13 -0
- package/rules/golang/grpc/references/service-patterns.md +276 -0
- package/rules/golang/testify/SKILL.md +239 -0
- package/rules/golang/testify/references/REFERENCE.md +13 -0
- package/rules/golang/testify/references/assert-patterns.md +170 -0
- package/rules/golang/validator/SKILL.md +234 -0
- package/rules/golang/validator/references/REFERENCE.md +13 -0
- package/rules/golang/validator/references/validation-tags.md +211 -0
- package/rules/golang/viper-config/SKILL.md +244 -0
- package/rules/golang/viper-config/references/REFERENCE.md +13 -0
- package/rules/golang/viper-config/references/config-loading.md +181 -0
- package/rules/golang/wire-di/SKILL.md +243 -0
- package/rules/golang/wire-di/references/REFERENCE.md +13 -0
- package/rules/golang/wire-di/references/provider-patterns.md +193 -0
- package/rules/golang/zap-logging/SKILL.md +203 -0
- package/rules/golang/zap-logging/references/REFERENCE.md +13 -0
- package/rules/golang/zap-logging/references/logger-config.md +165 -0
- package/rules/java/build-gradle/SKILL.md +92 -0
- package/rules/java/build-gradle/references/REFERENCE.md +14 -0
- package/rules/java/build-gradle/references/kotlin-dsl.md +118 -0
- package/rules/java/build-gradle/references/task-configuration.md +132 -0
- package/rules/java/build-maven/SKILL.md +86 -0
- package/rules/java/build-maven/references/REFERENCE.md +14 -0
- package/rules/java/build-maven/references/dependency-management.md +111 -0
- package/rules/java/build-maven/references/lifecycle-phases.md +114 -0
- package/rules/java/graalvm-native/SKILL.md +105 -0
- package/rules/java/graalvm-native/references/REFERENCE.md +12 -0
- package/rules/java/java-collections-streams/SKILL.md +148 -0
- package/rules/java/java-collections-streams/references/REFERENCE.md +15 -0
- package/rules/java/java-collections-streams/references/collectors-patterns.md +178 -0
- package/rules/java/java-collections-streams/references/stream-pipelines.md +165 -0
- package/rules/java/java-concurrency/SKILL.md +187 -0
- package/rules/java/java-concurrency/references/REFERENCE.md +17 -0
- package/rules/java/java-concurrency/references/completable-future.md +165 -0
- package/rules/java/java-concurrency/references/executor-patterns.md +176 -0
- package/rules/java/java-concurrency/references/virtual-threads.md +190 -0
- package/rules/java/java-core-language/SKILL.md +121 -0
- package/rules/java/java-core-language/references/REFERENCE.md +15 -0
- package/rules/java/java-core-language/references/jvm-memory-model.md +160 -0
- package/rules/java/java-core-language/references/modern-java-features.md +168 -0
- package/rules/java/java-project-structure/SKILL.md +195 -0
- package/rules/java/java-project-structure/references/REFERENCE.md +15 -0
- package/rules/java/java-project-structure/references/maven-project-layout.md +199 -0
- package/rules/java/java-project-structure/references/module-system.md +159 -0
- package/rules/java/micronaut-core/SKILL.md +99 -0
- package/rules/java/micronaut-core/references/REFERENCE.md +12 -0
- package/rules/java/micronaut-reactive/SKILL.md +68 -0
- package/rules/java/micronaut-reactive/references/REFERENCE.md +12 -0
- package/rules/java/quarkus-core/SKILL.md +85 -0
- package/rules/java/quarkus-core/references/REFERENCE.md +12 -0
- package/rules/java/quarkus-reactive/SKILL.md +67 -0
- package/rules/java/quarkus-reactive/references/REFERENCE.md +12 -0
- package/rules/java/spring-batch/SKILL.md +102 -0
- package/rules/java/spring-batch/references/REFERENCE.md +12 -0
- package/rules/java/spring-boot-architecture/SKILL.md +206 -0
- package/rules/java/spring-boot-architecture/references/REFERENCE.md +15 -0
- package/rules/java/spring-boot-architecture/references/auto-configuration.md +158 -0
- package/rules/java/spring-boot-architecture/references/configuration-properties.md +202 -0
- package/rules/java/spring-boot-web/SKILL.md +217 -0
- package/rules/java/spring-boot-web/references/REFERENCE.md +17 -0
- package/rules/java/spring-cloud/SKILL.md +109 -0
- package/rules/java/spring-cloud/references/REFERENCE.md +13 -0
- package/rules/java/spring-data-jpa/SKILL.md +241 -0
- package/rules/java/spring-data-jpa/references/REFERENCE.md +16 -0
- package/rules/java/spring-security/SKILL.md +161 -0
- package/rules/java/spring-security/references/REFERENCE.md +16 -0
- package/rules/java/spring-security/references/jwt-auth-flow.md +213 -0
- package/rules/java/testing-junit-mockito/SKILL.md +135 -0
- package/rules/java/testing-junit-mockito/references/REFERENCE.md +15 -0
- package/rules/java/testing-junit-mockito/references/junit5-patterns.md +159 -0
- package/rules/java/testing-junit-mockito/references/mockito-patterns.md +148 -0
- package/rules/java/testing-junit-mockito/references/spring-boot-testing.md +152 -0
- package/rules/javascript/best-practices/SKILL.md +64 -0
- package/rules/javascript/best-practices/references/REFERENCE.md +91 -0
- package/rules/javascript/language/SKILL.md +71 -0
- package/rules/javascript/language/references/REFERENCE.md +106 -0
- package/rules/javascript/tooling/SKILL.md +60 -0
- package/rules/javascript/tooling/references/REFERENCE.md +107 -0
- package/rules/metadata.json +54 -0
- package/rules/nestjs/api-standards/SKILL.md +47 -0
- package/rules/nestjs/api-standards/references/pagination-wrapper.md +87 -0
- package/rules/nestjs/architecture/SKILL.md +68 -0
- package/rules/nestjs/architecture/references/dynamic-module.md +53 -0
- package/rules/nestjs/caching/SKILL.md +51 -0
- package/rules/nestjs/caching/references/REFERENCE.md +13 -0
- package/rules/nestjs/caching/references/cache-patterns.md +183 -0
- package/rules/nestjs/configuration/SKILL.md +41 -0
- package/rules/nestjs/configuration/references/REFERENCE.md +13 -0
- package/rules/nestjs/configuration/references/config-patterns.md +184 -0
- package/rules/nestjs/controllers-services/SKILL.md +63 -0
- package/rules/nestjs/controllers-services/references/REFERENCE.md +14 -0
- package/rules/nestjs/controllers-services/references/controller-patterns.md +119 -0
- package/rules/nestjs/controllers-services/references/service-patterns.md +129 -0
- package/rules/nestjs/database/SKILL.md +102 -0
- package/rules/nestjs/database/references/REFERENCE.md +14 -0
- package/rules/nestjs/database/references/typeorm-patterns.md +156 -0
- package/rules/nestjs/deployment/SKILL.md +36 -0
- package/rules/nestjs/deployment/references/REFERENCE.md +13 -0
- package/rules/nestjs/deployment/references/deployment-patterns.md +140 -0
- package/rules/nestjs/documentation/SKILL.md +64 -0
- package/rules/nestjs/documentation/references/REFERENCE.md +13 -0
- package/rules/nestjs/documentation/references/swagger-patterns.md +139 -0
- package/rules/nestjs/error-handling/SKILL.md +55 -0
- package/rules/nestjs/error-handling/references/REFERENCE.md +13 -0
- package/rules/nestjs/error-handling/references/exception-filters.md +152 -0
- package/rules/nestjs/file-uploads/SKILL.md +35 -0
- package/rules/nestjs/file-uploads/references/REFERENCE.md +13 -0
- package/rules/nestjs/file-uploads/references/upload-patterns.md +125 -0
- package/rules/nestjs/observability/SKILL.md +39 -0
- package/rules/nestjs/observability/references/REFERENCE.md +13 -0
- package/rules/nestjs/observability/references/logging-metrics.md +175 -0
- package/rules/nestjs/performance/SKILL.md +60 -0
- package/rules/nestjs/performance/references/REFERENCE.md +13 -0
- package/rules/nestjs/performance/references/performance-patterns.md +107 -0
- package/rules/nestjs/real-time/SKILL.md +45 -0
- package/rules/nestjs/real-time/references/REFERENCE.md +13 -0
- package/rules/nestjs/real-time/references/websocket-patterns.md +121 -0
- package/rules/nestjs/scheduling/SKILL.md +39 -0
- package/rules/nestjs/scheduling/references/REFERENCE.md +13 -0
- package/rules/nestjs/scheduling/references/scheduling-patterns.md +137 -0
- package/rules/nestjs/search/SKILL.md +41 -0
- package/rules/nestjs/search/references/REFERENCE.md +13 -0
- package/rules/nestjs/search/references/search-patterns.md +137 -0
- package/rules/nestjs/security/SKILL.md +87 -0
- package/rules/nestjs/security/references/REFERENCE.md +14 -0
- package/rules/nestjs/security/references/authentication.md +151 -0
- package/rules/nestjs/testing/SKILL.md +40 -0
- package/rules/nestjs/testing/references/REFERENCE.md +14 -0
- package/rules/nestjs/testing/references/unit-testing.md +179 -0
- package/rules/nestjs/transport/SKILL.md +45 -0
- package/rules/nestjs/transport/references/REFERENCE.md +13 -0
- package/rules/nestjs/transport/references/microservices-patterns.md +170 -0
- package/rules/nextjs/app-router/SKILL.md +46 -0
- package/rules/nextjs/app-router/references/REFERENCE.md +14 -0
- package/rules/nextjs/app-router/references/routing-patterns.md +182 -0
- package/rules/nextjs/architecture/SKILL.md +44 -0
- package/rules/nextjs/architecture/references/fsd-structure.md +77 -0
- package/rules/nextjs/authentication/SKILL.md +29 -0
- package/rules/nextjs/authentication/references/auth-implementation.md +73 -0
- package/rules/nextjs/caching/SKILL.md +66 -0
- package/rules/nextjs/caching/references/REFERENCE.md +13 -0
- package/rules/nextjs/caching/references/cache-strategies.md +168 -0
- package/rules/nextjs/data-access-layer/SKILL.md +33 -0
- package/rules/nextjs/data-access-layer/references/patterns.md +66 -0
- package/rules/nextjs/data-fetching/SKILL.md +59 -0
- package/rules/nextjs/data-fetching/references/REFERENCE.md +13 -0
- package/rules/nextjs/data-fetching/references/fetch-patterns.md +160 -0
- package/rules/nextjs/internationalization/SKILL.md +105 -0
- package/rules/nextjs/internationalization/references/REFERENCE.md +13 -0
- package/rules/nextjs/internationalization/references/i18n-patterns.md +180 -0
- package/rules/nextjs/optimization/SKILL.md +64 -0
- package/rules/nextjs/optimization/references/REFERENCE.md +13 -0
- package/rules/nextjs/optimization/references/optimization-patterns.md +190 -0
- package/rules/nextjs/rendering/SKILL.md +91 -0
- package/rules/nextjs/rendering/references/REFERENCE.md +13 -0
- package/rules/nextjs/rendering/references/rendering-modes.md +163 -0
- package/rules/nextjs/server-actions/SKILL.md +46 -0
- package/rules/nextjs/server-actions/references/REFERENCE.md +13 -0
- package/rules/nextjs/server-actions/references/action-patterns.md +188 -0
- package/rules/nextjs/server-components/SKILL.md +52 -0
- package/rules/nextjs/server-components/references/REFERENCE.md +13 -0
- package/rules/nextjs/server-components/references/component-patterns.md +175 -0
- package/rules/nextjs/state-management/SKILL.md +73 -0
- package/rules/nextjs/state-management/references/REFERENCE.md +13 -0
- package/rules/nextjs/state-management/references/state-patterns.md +218 -0
- package/rules/nextjs/styling/SKILL.md +31 -0
- package/rules/nextjs/styling/references/implementation.md +56 -0
- package/rules/react/component-patterns/SKILL.md +66 -0
- package/rules/react/component-patterns/references/REFERENCE.md +126 -0
- package/rules/react/hooks/SKILL.md +60 -0
- package/rules/react/hooks/references/REFERENCE.md +132 -0
- package/rules/react/hooks.rule.md +79 -0
- package/rules/react/performance/SKILL.md +69 -0
- package/rules/react/performance/references/REFERENCE.md +143 -0
- package/rules/react/security/SKILL.md +46 -0
- package/rules/react/security/references/REFERENCE.md +170 -0
- package/rules/react/state-management/SKILL.md +56 -0
- package/rules/react/state-management/references/REFERENCE.md +137 -0
- package/rules/react/testing/SKILL.md +45 -0
- package/rules/react/testing/references/REFERENCE.md +149 -0
- package/rules/react/tooling/SKILL.md +39 -0
- package/rules/react/typescript/SKILL.md +53 -0
- package/rules/rust/actix-web/SKILL.md +160 -0
- package/rules/rust/actix-web/references/REFERENCE.md +13 -0
- package/rules/rust/actix-web/references/handler-patterns.md +198 -0
- package/rules/rust/async-graphql/SKILL.md +228 -0
- package/rules/rust/async-graphql/references/REFERENCE.md +13 -0
- package/rules/rust/async-graphql/references/schema-patterns.md +215 -0
- package/rules/rust/axum/SKILL.md +161 -0
- package/rules/rust/axum/references/REFERENCE.md +14 -0
- package/rules/rust/axum/references/handler-patterns.md +97 -0
- package/rules/rust/bevy/SKILL.md +206 -0
- package/rules/rust/bevy/references/REFERENCE.md +13 -0
- package/rules/rust/bevy/references/ecs-patterns.md +226 -0
- package/rules/rust/clap/SKILL.md +217 -0
- package/rules/rust/clap/references/REFERENCE.md +13 -0
- package/rules/rust/clap/references/derive-patterns.md +205 -0
- package/rules/rust/core/SKILL.md +154 -0
- package/rules/rust/core/references/REFERENCE.md +14 -0
- package/rules/rust/core/references/error-handling.md +92 -0
- package/rules/rust/diesel-orm/SKILL.md +176 -0
- package/rules/rust/diesel-orm/references/REFERENCE.md +13 -0
- package/rules/rust/diesel-orm/references/schema-patterns.md +206 -0
- package/rules/rust/rocket/SKILL.md +182 -0
- package/rules/rust/rocket/references/REFERENCE.md +13 -0
- package/rules/rust/rocket/references/handler-patterns.md +209 -0
- package/rules/rust/sea-orm/SKILL.md +230 -0
- package/rules/rust/sea-orm/references/REFERENCE.md +13 -0
- package/rules/rust/sea-orm/references/entity-patterns.md +221 -0
- package/rules/rust/serde-serialization/SKILL.md +150 -0
- package/rules/rust/serde-serialization/references/REFERENCE.md +13 -0
- package/rules/rust/serde-serialization/references/serialization-patterns.md +199 -0
- package/rules/rust/sqlx-database/SKILL.md +140 -0
- package/rules/rust/sqlx-database/references/REFERENCE.md +13 -0
- package/rules/rust/sqlx-database/references/query-patterns.md +210 -0
- package/rules/rust/tauri/SKILL.md +180 -0
- package/rules/rust/tauri/references/REFERENCE.md +13 -0
- package/rules/rust/tauri/references/command-patterns.md +209 -0
- package/rules/rust/tokio-runtime/SKILL.md +167 -0
- package/rules/rust/tokio-runtime/references/REFERENCE.md +14 -0
- package/rules/rust/tokio-runtime/references/async-patterns.md +137 -0
- package/rules/rust/tokio-runtime/references/synchronization.md +152 -0
- package/rules/rust/tonic/SKILL.md +231 -0
- package/rules/rust/tonic/references/REFERENCE.md +13 -0
- package/rules/rust/tonic/references/service-patterns.md +213 -0
- package/rules/rust/tracing/SKILL.md +214 -0
- package/rules/rust/tracing/references/REFERENCE.md +13 -0
- package/rules/rust/tracing/references/instrumentation.md +187 -0
- package/rules/typescript/best-practices/SKILL.md +108 -0
- package/rules/typescript/best-practices/references/REFERENCE.md +68 -0
- package/rules/typescript/language/SKILL.md +72 -0
- package/rules/typescript/language/references/REFERENCE.md +67 -0
- package/rules/typescript/patterns.rule.md +85 -0
- package/rules/typescript/security/SKILL.md +59 -0
- package/rules/typescript/security/references/REFERENCE.md +113 -0
- package/rules/typescript/tooling/SKILL.md +52 -0
- package/rules/typescript/tooling/references/REFERENCE.md +110 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Java Project Structure
|
|
3
|
+
description: Standard project layout, package conventions, module system, and layered architecture patterns.
|
|
4
|
+
metadata:
|
|
5
|
+
labels: [java, project, architecture, structure]
|
|
6
|
+
triggers:
|
|
7
|
+
files: ['pom.xml', 'build.gradle', 'build.gradle.kts', 'settings.gradle', 'module-info.java']
|
|
8
|
+
keywords: [src/main/java, src/test/java, module-info, package, module]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Java Project Structure Standards
|
|
12
|
+
|
|
13
|
+
## Standard Maven/Gradle Layout
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
project-root/
|
|
17
|
+
├── src/
|
|
18
|
+
│ ├── main/
|
|
19
|
+
│ │ ├── java/ # Application source code
|
|
20
|
+
│ │ │ └── com/example/app/
|
|
21
|
+
│ │ │ ├── Application.java
|
|
22
|
+
│ │ │ ├── config/
|
|
23
|
+
│ │ │ ├── controller/
|
|
24
|
+
│ │ │ ├── service/
|
|
25
|
+
│ │ │ ├── repository/
|
|
26
|
+
│ │ │ ├── model/
|
|
27
|
+
│ │ │ └── exception/
|
|
28
|
+
│ │ └── resources/ # Configuration files
|
|
29
|
+
│ │ ├── application.yml
|
|
30
|
+
│ │ ├── application-dev.yml
|
|
31
|
+
│ │ ├── application-prod.yml
|
|
32
|
+
│ │ └── db/migration/
|
|
33
|
+
│ └── test/
|
|
34
|
+
│ ├── java/ # Test source code
|
|
35
|
+
│ │ └── com/example/app/
|
|
36
|
+
│ │ ├── controller/
|
|
37
|
+
│ │ ├── service/
|
|
38
|
+
│ │ └── repository/
|
|
39
|
+
│ └── resources/ # Test resources
|
|
40
|
+
│ └── application-test.yml
|
|
41
|
+
├── pom.xml # Maven build
|
|
42
|
+
├── build.gradle.kts # or Gradle build
|
|
43
|
+
└── README.md
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Package Naming Conventions
|
|
47
|
+
|
|
48
|
+
```java
|
|
49
|
+
// Reverse domain name + project + layer
|
|
50
|
+
com.company.project.controller
|
|
51
|
+
com.company.project.service
|
|
52
|
+
com.company.project.repository
|
|
53
|
+
com.company.project.model
|
|
54
|
+
com.company.project.dto
|
|
55
|
+
com.company.project.exception
|
|
56
|
+
com.company.project.config
|
|
57
|
+
com.company.project.util
|
|
58
|
+
|
|
59
|
+
// Feature-based alternative
|
|
60
|
+
com.company.project.user.controller
|
|
61
|
+
com.company.project.user.service
|
|
62
|
+
com.company.project.order.controller
|
|
63
|
+
com.company.project.order.service
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Layered Architecture
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
┌─────────────────────────────────────────┐
|
|
70
|
+
│ Controller Layer │ ← HTTP handling, validation
|
|
71
|
+
├─────────────────────────────────────────┤
|
|
72
|
+
│ Service Layer │ ← Business logic
|
|
73
|
+
├─────────────────────────────────────────┤
|
|
74
|
+
│ Repository Layer │ ← Data access
|
|
75
|
+
├─────────────────────────────────────────┤
|
|
76
|
+
│ Model/Entity │ ← Domain objects
|
|
77
|
+
└─────────────────────────────────────────┘
|
|
78
|
+
|
|
79
|
+
// Dependency rules:
|
|
80
|
+
// Controller → Service → Repository → Model
|
|
81
|
+
// NEVER: Repository → Service or Model → anything
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
```java
|
|
85
|
+
// Controller - handles HTTP
|
|
86
|
+
@RestController
|
|
87
|
+
@RequestMapping("/api/users")
|
|
88
|
+
public class UserController {
|
|
89
|
+
private final UserService userService;
|
|
90
|
+
// Only UserService, never UserRepository
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Service - business logic
|
|
94
|
+
@Service
|
|
95
|
+
public class UserService {
|
|
96
|
+
private final UserRepository userRepository;
|
|
97
|
+
private final EmailService emailService;
|
|
98
|
+
// Can use multiple repositories and services
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Repository - data access
|
|
102
|
+
@Repository
|
|
103
|
+
public interface UserRepository extends JpaRepository<User, Long> {
|
|
104
|
+
// Only data operations
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## DTO Pattern
|
|
109
|
+
|
|
110
|
+
```java
|
|
111
|
+
// Separate DTOs for request/response
|
|
112
|
+
public record CreateUserRequest(
|
|
113
|
+
@NotBlank String name,
|
|
114
|
+
@Email String email
|
|
115
|
+
) {}
|
|
116
|
+
|
|
117
|
+
public record UserResponse(
|
|
118
|
+
Long id,
|
|
119
|
+
String name,
|
|
120
|
+
String email,
|
|
121
|
+
LocalDateTime createdAt
|
|
122
|
+
) {
|
|
123
|
+
public static UserResponse from(User user) {
|
|
124
|
+
return new UserResponse(
|
|
125
|
+
user.getId(),
|
|
126
|
+
user.getName(),
|
|
127
|
+
user.getEmail(),
|
|
128
|
+
user.getCreatedAt()
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Mapper interface
|
|
134
|
+
public interface UserMapper {
|
|
135
|
+
User toEntity(CreateUserRequest request);
|
|
136
|
+
UserResponse toResponse(User user);
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Module System (JPMS)
|
|
141
|
+
|
|
142
|
+
```java
|
|
143
|
+
// module-info.java
|
|
144
|
+
module com.example.app {
|
|
145
|
+
// Dependencies
|
|
146
|
+
requires java.sql;
|
|
147
|
+
requires spring.boot;
|
|
148
|
+
requires spring.boot.autoconfigure;
|
|
149
|
+
requires spring.web;
|
|
150
|
+
|
|
151
|
+
// What we export
|
|
152
|
+
exports com.example.app.api;
|
|
153
|
+
exports com.example.app.model;
|
|
154
|
+
|
|
155
|
+
// Internal packages (not exported)
|
|
156
|
+
// com.example.app.internal is hidden
|
|
157
|
+
|
|
158
|
+
// Reflection access for frameworks
|
|
159
|
+
opens com.example.app.model to spring.core;
|
|
160
|
+
opens com.example.app to spring.beans;
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Multi-Module Project
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
parent-project/
|
|
168
|
+
├── pom.xml # Parent POM
|
|
169
|
+
├── core/ # Shared domain, utils
|
|
170
|
+
│ ├── pom.xml
|
|
171
|
+
│ └── src/main/java/
|
|
172
|
+
├── api/ # REST API module
|
|
173
|
+
│ ├── pom.xml
|
|
174
|
+
│ └── src/main/java/
|
|
175
|
+
├── service/ # Business logic
|
|
176
|
+
│ ├── pom.xml
|
|
177
|
+
│ └── src/main/java/
|
|
178
|
+
└── infrastructure/ # External integrations
|
|
179
|
+
├── pom.xml
|
|
180
|
+
└── src/main/java/
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Best Practices
|
|
184
|
+
|
|
185
|
+
1. **One class per file** - class name matches file name
|
|
186
|
+
2. **Package by layer OR feature** - pick one, be consistent
|
|
187
|
+
3. **Keep packages flat** - avoid deep nesting
|
|
188
|
+
4. **Separate DTOs from entities** - never expose entities in API
|
|
189
|
+
5. **module-info.java** for libraries, optional for applications
|
|
190
|
+
6. **Resources alongside code** - feature-specific configs with feature
|
|
191
|
+
|
|
192
|
+
## References
|
|
193
|
+
|
|
194
|
+
- [Maven Project Layout](references/maven-project-layout.md) - Complete structure, profiles
|
|
195
|
+
- [Module System](references/module-system.md) - JPMS patterns, migration
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Java Project Structure References
|
|
2
|
+
|
|
3
|
+
## References
|
|
4
|
+
|
|
5
|
+
- [**Maven Project Layout**](maven-project-layout.md) - Standard directories, profiles, multi-module setup
|
|
6
|
+
- [**Module System**](module-system.md) - JPMS patterns, exports, opens, migration from classpath
|
|
7
|
+
|
|
8
|
+
## Quick Checks
|
|
9
|
+
|
|
10
|
+
- [ ] Standard Maven/Gradle layout (src/main/java, src/test/java)
|
|
11
|
+
- [ ] Reverse domain package naming (com.company.project.layer)
|
|
12
|
+
- [ ] Layer dependencies flow downward only
|
|
13
|
+
- [ ] DTOs separate from entities
|
|
14
|
+
- [ ] Test packages mirror source packages
|
|
15
|
+
- [ ] Configuration in src/main/resources
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
# Maven Project Layout
|
|
2
|
+
|
|
3
|
+
## Standard Directory Structure
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
project/
|
|
7
|
+
├── pom.xml
|
|
8
|
+
├── src/
|
|
9
|
+
│ ├── main/
|
|
10
|
+
│ │ ├── java/ # Java source files
|
|
11
|
+
│ │ ├── resources/ # Resources bundled in JAR
|
|
12
|
+
│ │ │ ├── application.yml
|
|
13
|
+
│ │ │ ├── logback.xml
|
|
14
|
+
│ │ │ └── META-INF/
|
|
15
|
+
│ │ └── filters/ # Resource filter files
|
|
16
|
+
│ └── test/
|
|
17
|
+
│ ├── java/ # Test source files
|
|
18
|
+
│ └── resources/ # Test resources
|
|
19
|
+
│ └── application-test.yml
|
|
20
|
+
├── target/ # Build output (generated)
|
|
21
|
+
└── .mvn/ # Maven wrapper
|
|
22
|
+
└── wrapper/
|
|
23
|
+
└── maven-wrapper.properties
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## POM Structure
|
|
27
|
+
|
|
28
|
+
```xml
|
|
29
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
30
|
+
<project xmlns="http://maven.apache.org/POM/4.0.0">
|
|
31
|
+
<modelVersion>4.0.0</modelVersion>
|
|
32
|
+
|
|
33
|
+
<parent>
|
|
34
|
+
<groupId>org.springframework.boot</groupId>
|
|
35
|
+
<artifactId>spring-boot-starter-parent</artifactId>
|
|
36
|
+
<version>3.2.0</version>
|
|
37
|
+
</parent>
|
|
38
|
+
|
|
39
|
+
<groupId>com.example</groupId>
|
|
40
|
+
<artifactId>my-app</artifactId>
|
|
41
|
+
<version>1.0.0-SNAPSHOT</version>
|
|
42
|
+
<packaging>jar</packaging>
|
|
43
|
+
|
|
44
|
+
<properties>
|
|
45
|
+
<java.version>21</java.version>
|
|
46
|
+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
47
|
+
</properties>
|
|
48
|
+
|
|
49
|
+
<dependencies>
|
|
50
|
+
<dependency>
|
|
51
|
+
<groupId>org.springframework.boot</groupId>
|
|
52
|
+
<artifactId>spring-boot-starter-web</artifactId>
|
|
53
|
+
</dependency>
|
|
54
|
+
<dependency>
|
|
55
|
+
<groupId>org.springframework.boot</groupId>
|
|
56
|
+
<artifactId>spring-boot-starter-test</artifactId>
|
|
57
|
+
<scope>test</scope>
|
|
58
|
+
</dependency>
|
|
59
|
+
</dependencies>
|
|
60
|
+
|
|
61
|
+
<build>
|
|
62
|
+
<plugins>
|
|
63
|
+
<plugin>
|
|
64
|
+
<groupId>org.springframework.boot</groupId>
|
|
65
|
+
<artifactId>spring-boot-maven-plugin</artifactId>
|
|
66
|
+
</plugin>
|
|
67
|
+
</plugins>
|
|
68
|
+
</build>
|
|
69
|
+
|
|
70
|
+
<profiles>
|
|
71
|
+
<profile>
|
|
72
|
+
<id>dev</id>
|
|
73
|
+
<activation>
|
|
74
|
+
<activeByDefault>true</activeByDefault>
|
|
75
|
+
</activation>
|
|
76
|
+
<properties>
|
|
77
|
+
<spring.profiles.active>dev</spring.profiles.active>
|
|
78
|
+
</properties>
|
|
79
|
+
</profile>
|
|
80
|
+
<profile>
|
|
81
|
+
<id>prod</id>
|
|
82
|
+
<properties>
|
|
83
|
+
<spring.profiles.active>prod</spring.profiles.active>
|
|
84
|
+
</properties>
|
|
85
|
+
</profile>
|
|
86
|
+
</profiles>
|
|
87
|
+
</project>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Multi-Module Project
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
parent/
|
|
94
|
+
├── pom.xml # Parent POM
|
|
95
|
+
├── common/
|
|
96
|
+
│ ├── pom.xml
|
|
97
|
+
│ └── src/main/java/
|
|
98
|
+
├── api/
|
|
99
|
+
│ ├── pom.xml
|
|
100
|
+
│ └── src/main/java/
|
|
101
|
+
└── service/
|
|
102
|
+
├── pom.xml
|
|
103
|
+
└── src/main/java/
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**Parent POM:**
|
|
107
|
+
|
|
108
|
+
```xml
|
|
109
|
+
<project>
|
|
110
|
+
<groupId>com.example</groupId>
|
|
111
|
+
<artifactId>parent</artifactId>
|
|
112
|
+
<version>1.0.0</version>
|
|
113
|
+
<packaging>pom</packaging>
|
|
114
|
+
|
|
115
|
+
<modules>
|
|
116
|
+
<module>common</module>
|
|
117
|
+
<module>api</module>
|
|
118
|
+
<module>service</module>
|
|
119
|
+
</modules>
|
|
120
|
+
|
|
121
|
+
<dependencyManagement>
|
|
122
|
+
<dependencies>
|
|
123
|
+
<!-- Shared dependency versions -->
|
|
124
|
+
<dependency>
|
|
125
|
+
<groupId>com.example</groupId>
|
|
126
|
+
<artifactId>common</artifactId>
|
|
127
|
+
<version>${project.version}</version>
|
|
128
|
+
</dependency>
|
|
129
|
+
</dependencies>
|
|
130
|
+
</dependencyManagement>
|
|
131
|
+
</project>
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Child POM:**
|
|
135
|
+
|
|
136
|
+
```xml
|
|
137
|
+
<project>
|
|
138
|
+
<parent>
|
|
139
|
+
<groupId>com.example</groupId>
|
|
140
|
+
<artifactId>parent</artifactId>
|
|
141
|
+
<version>1.0.0</version>
|
|
142
|
+
</parent>
|
|
143
|
+
|
|
144
|
+
<artifactId>api</artifactId>
|
|
145
|
+
|
|
146
|
+
<dependencies>
|
|
147
|
+
<dependency>
|
|
148
|
+
<groupId>com.example</groupId>
|
|
149
|
+
<artifactId>common</artifactId>
|
|
150
|
+
</dependency>
|
|
151
|
+
</dependencies>
|
|
152
|
+
</project>
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Resource Filtering
|
|
156
|
+
|
|
157
|
+
```xml
|
|
158
|
+
<!-- pom.xml -->
|
|
159
|
+
<build>
|
|
160
|
+
<resources>
|
|
161
|
+
<resource>
|
|
162
|
+
<directory>src/main/resources</directory>
|
|
163
|
+
<filtering>true</filtering>
|
|
164
|
+
</resource>
|
|
165
|
+
</resources>
|
|
166
|
+
</build>
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
```yaml
|
|
170
|
+
# application.yml
|
|
171
|
+
app:
|
|
172
|
+
version: @project.version@
|
|
173
|
+
build-time: @maven.build.timestamp@
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Common Commands
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
# Build
|
|
180
|
+
mvn clean install
|
|
181
|
+
|
|
182
|
+
# Skip tests
|
|
183
|
+
mvn clean install -DskipTests
|
|
184
|
+
|
|
185
|
+
# Run specific profile
|
|
186
|
+
mvn clean install -Pprod
|
|
187
|
+
|
|
188
|
+
# Dependency tree
|
|
189
|
+
mvn dependency:tree
|
|
190
|
+
|
|
191
|
+
# Effective POM
|
|
192
|
+
mvn help:effective-pom
|
|
193
|
+
|
|
194
|
+
# Update versions
|
|
195
|
+
mvn versions:set -DnewVersion=2.0.0
|
|
196
|
+
|
|
197
|
+
# Check for dependency updates
|
|
198
|
+
mvn versions:display-dependency-updates
|
|
199
|
+
```
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# Java Module System (JPMS)
|
|
2
|
+
|
|
3
|
+
## Module Declaration
|
|
4
|
+
|
|
5
|
+
```java
|
|
6
|
+
// src/main/java/module-info.java
|
|
7
|
+
module com.example.myapp {
|
|
8
|
+
// Required modules (dependencies)
|
|
9
|
+
requires java.base; // Implicit, always available
|
|
10
|
+
requires java.sql; // JDK module
|
|
11
|
+
requires java.logging;
|
|
12
|
+
requires spring.boot; // Third-party module
|
|
13
|
+
requires spring.web;
|
|
14
|
+
requires transitive com.example.common; // Transitive dependency
|
|
15
|
+
|
|
16
|
+
// Exported packages (public API)
|
|
17
|
+
exports com.example.myapp.api;
|
|
18
|
+
exports com.example.myapp.model;
|
|
19
|
+
exports com.example.myapp.dto to com.example.client; // Qualified export
|
|
20
|
+
|
|
21
|
+
// Opened packages (for reflection)
|
|
22
|
+
opens com.example.myapp.model to spring.core, hibernate.core;
|
|
23
|
+
opens com.example.myapp to spring.beans;
|
|
24
|
+
|
|
25
|
+
// Service provider
|
|
26
|
+
provides com.example.spi.PaymentProcessor
|
|
27
|
+
with com.example.myapp.StripeProcessor;
|
|
28
|
+
|
|
29
|
+
// Service consumer
|
|
30
|
+
uses com.example.spi.NotificationService;
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Module Keywords
|
|
35
|
+
|
|
36
|
+
```java
|
|
37
|
+
// requires - declare dependency
|
|
38
|
+
requires java.sql; // Regular dependency
|
|
39
|
+
requires transitive spring.core; // Transitive (consumers get it too)
|
|
40
|
+
requires static lombok; // Optional (compile-time only)
|
|
41
|
+
|
|
42
|
+
// exports - make packages accessible
|
|
43
|
+
exports com.example.api; // Export to all
|
|
44
|
+
exports com.example.internal to com.example.test; // Qualified export
|
|
45
|
+
|
|
46
|
+
// opens - allow reflection
|
|
47
|
+
opens com.example.model; // Open to all for reflection
|
|
48
|
+
opens com.example.entity to hibernate.core; // Qualified open
|
|
49
|
+
|
|
50
|
+
// open module - everything open for reflection
|
|
51
|
+
open module com.example.app {
|
|
52
|
+
requires spring.boot;
|
|
53
|
+
exports com.example.api;
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Automatic Modules
|
|
58
|
+
|
|
59
|
+
For JARs without module-info.java (most legacy libraries):
|
|
60
|
+
|
|
61
|
+
```java
|
|
62
|
+
// Module name derived from JAR filename or Automatic-Module-Name manifest
|
|
63
|
+
// guava-31.1-jre.jar → guava
|
|
64
|
+
// commons-lang3-3.12.0.jar → commons.lang3
|
|
65
|
+
|
|
66
|
+
module com.example.app {
|
|
67
|
+
requires guava; // Automatic module
|
|
68
|
+
requires commons.lang3; // Automatic module
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**Manifest entry (recommended for libraries):**
|
|
73
|
+
```
|
|
74
|
+
Automatic-Module-Name: com.google.guava
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Module Path vs Class Path
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# Module path (JPMS)
|
|
81
|
+
java --module-path mods -m com.example.app/com.example.Main
|
|
82
|
+
|
|
83
|
+
# Class path (traditional)
|
|
84
|
+
java -cp "lib/*:app.jar" com.example.Main
|
|
85
|
+
|
|
86
|
+
# Mixed (automatic modules on module path)
|
|
87
|
+
java --module-path mods --add-modules ALL-MODULE-PATH -cp legacy.jar com.example.Main
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Migration Strategy
|
|
91
|
+
|
|
92
|
+
### 1. Bottom-up Migration
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
1. Identify leaf modules (no internal dependencies)
|
|
96
|
+
2. Add module-info.java to leaf modules
|
|
97
|
+
3. Move up the dependency tree
|
|
98
|
+
4. Use automatic modules for unmigrated dependencies
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### 2. Handling Reflection
|
|
102
|
+
|
|
103
|
+
```java
|
|
104
|
+
// Spring/Hibernate need reflection access
|
|
105
|
+
module com.example.app {
|
|
106
|
+
// Open specific packages
|
|
107
|
+
opens com.example.entity to hibernate.core;
|
|
108
|
+
opens com.example.config to spring.core;
|
|
109
|
+
|
|
110
|
+
// Or open entire module
|
|
111
|
+
// open module com.example.app { ... }
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### 3. Split Packages
|
|
116
|
+
|
|
117
|
+
```java
|
|
118
|
+
// PROBLEM: Same package in multiple JARs
|
|
119
|
+
// javax.annotation in jsr305.jar AND java.annotation module
|
|
120
|
+
|
|
121
|
+
// SOLUTION: Exclude duplicate JAR or merge packages
|
|
122
|
+
// In Maven: use <exclusions>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Compile and Run
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
# Compile
|
|
129
|
+
javac -d out --module-source-path src $(find src -name "*.java")
|
|
130
|
+
|
|
131
|
+
# Package
|
|
132
|
+
jar --create --file mods/com.example.app.jar \
|
|
133
|
+
--main-class com.example.Main \
|
|
134
|
+
-C out/com.example.app .
|
|
135
|
+
|
|
136
|
+
# Run
|
|
137
|
+
java --module-path mods -m com.example.app
|
|
138
|
+
|
|
139
|
+
# With VM args
|
|
140
|
+
java --module-path mods \
|
|
141
|
+
--add-opens java.base/java.lang=com.example.app \
|
|
142
|
+
-m com.example.app
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Debugging Module Issues
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
# Show module resolution
|
|
149
|
+
java --show-module-resolution -m com.example.app
|
|
150
|
+
|
|
151
|
+
# Describe module
|
|
152
|
+
jar --describe-module --file=app.jar
|
|
153
|
+
|
|
154
|
+
# List modules
|
|
155
|
+
java --list-modules
|
|
156
|
+
|
|
157
|
+
# Check for split packages
|
|
158
|
+
jdeps --multi-release 21 -s app.jar
|
|
159
|
+
```
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Micronaut Core
|
|
3
|
+
description: Compile-time dependency injection, configuration, AOP, and startup optimization.
|
|
4
|
+
metadata:
|
|
5
|
+
labels: [java, micronaut, di, aot]
|
|
6
|
+
triggers:
|
|
7
|
+
files: ['**/*.java', 'application.yml', 'application.properties']
|
|
8
|
+
keywords: [Micronaut, '@Inject', '@Singleton', '@ConfigurationProperties', '@Factory', '@Controller']
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Micronaut Core Standards
|
|
12
|
+
|
|
13
|
+
## Compile-Time DI
|
|
14
|
+
|
|
15
|
+
```java
|
|
16
|
+
@Singleton
|
|
17
|
+
public class UserService {
|
|
18
|
+
|
|
19
|
+
private final UserRepository repository;
|
|
20
|
+
private final EventPublisher eventPublisher;
|
|
21
|
+
|
|
22
|
+
// Constructor injection (preferred)
|
|
23
|
+
public UserService(UserRepository repository, EventPublisher eventPublisher) {
|
|
24
|
+
this.repository = repository;
|
|
25
|
+
this.eventPublisher = eventPublisher;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Factory beans
|
|
30
|
+
@Factory
|
|
31
|
+
public class ClientFactory {
|
|
32
|
+
|
|
33
|
+
@Singleton
|
|
34
|
+
@Named("primary")
|
|
35
|
+
public HttpClient primaryClient() {
|
|
36
|
+
return HttpClient.create(URI.create("https://api.primary.com"));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
@Singleton
|
|
40
|
+
@Named("fallback")
|
|
41
|
+
public HttpClient fallbackClient() {
|
|
42
|
+
return HttpClient.create(URI.create("https://api.fallback.com"));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Configuration
|
|
48
|
+
|
|
49
|
+
```java
|
|
50
|
+
@ConfigurationProperties("app")
|
|
51
|
+
public record AppConfig(
|
|
52
|
+
String name,
|
|
53
|
+
int maxConnections,
|
|
54
|
+
DatabaseConfig database
|
|
55
|
+
) {
|
|
56
|
+
public record DatabaseConfig(
|
|
57
|
+
String url,
|
|
58
|
+
String username
|
|
59
|
+
) {}
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
```yaml
|
|
64
|
+
app:
|
|
65
|
+
name: MyMicronautApp
|
|
66
|
+
max-connections: 100
|
|
67
|
+
database:
|
|
68
|
+
url: jdbc:postgresql://localhost/db
|
|
69
|
+
username: admin
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Controllers
|
|
73
|
+
|
|
74
|
+
```java
|
|
75
|
+
@Controller("/users")
|
|
76
|
+
public class UserController {
|
|
77
|
+
|
|
78
|
+
private final UserService userService;
|
|
79
|
+
|
|
80
|
+
public UserController(UserService userService) {
|
|
81
|
+
this.userService = userService;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@Get("/{id}")
|
|
85
|
+
public User findById(Long id) {
|
|
86
|
+
return userService.findById(id);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
@Post
|
|
90
|
+
@Status(HttpStatus.CREATED)
|
|
91
|
+
public User create(@Valid @Body CreateUserRequest request) {
|
|
92
|
+
return userService.create(request);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## References
|
|
98
|
+
|
|
99
|
+
- [Compile-Time DI](references/compile-time-di.md) - AOT benefits, introspection
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Micronaut Core References
|
|
2
|
+
|
|
3
|
+
## References
|
|
4
|
+
|
|
5
|
+
- [**Compile-Time DI**](compile-time-di.md) - AOT benefits, bean introspection, startup time
|
|
6
|
+
|
|
7
|
+
## Quick Checks
|
|
8
|
+
|
|
9
|
+
- [ ] Use @Singleton for services
|
|
10
|
+
- [ ] Constructor injection over field injection
|
|
11
|
+
- [ ] Use records for configuration properties
|
|
12
|
+
- [ ] No reflection - everything at compile time
|