@hivehub/rulebook 1.2.0
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/LICENSE +191 -0
- package/README.md +539 -0
- package/dist/agents/claude-code.d.ts +69 -0
- package/dist/agents/claude-code.d.ts.map +1 -0
- package/dist/agents/claude-code.js +180 -0
- package/dist/agents/claude-code.js.map +1 -0
- package/dist/agents/cursor-agent.d.ts +184 -0
- package/dist/agents/cursor-agent.d.ts.map +1 -0
- package/dist/agents/cursor-agent.js +299 -0
- package/dist/agents/cursor-agent.js.map +1 -0
- package/dist/agents/gemini-cli.d.ts +69 -0
- package/dist/agents/gemini-cli.d.ts.map +1 -0
- package/dist/agents/gemini-cli.js +180 -0
- package/dist/agents/gemini-cli.js.map +1 -0
- package/dist/cli/commands.d.ts +57 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +1370 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/docs-prompts.d.ts +3 -0
- package/dist/cli/docs-prompts.d.ts.map +1 -0
- package/dist/cli/docs-prompts.js +45 -0
- package/dist/cli/docs-prompts.js.map +1 -0
- package/dist/cli/prompts.d.ts +6 -0
- package/dist/cli/prompts.d.ts.map +1 -0
- package/dist/cli/prompts.js +376 -0
- package/dist/cli/prompts.js.map +1 -0
- package/dist/core/agent-manager.d.ts +89 -0
- package/dist/core/agent-manager.d.ts.map +1 -0
- package/dist/core/agent-manager.js +546 -0
- package/dist/core/agent-manager.js.map +1 -0
- package/dist/core/auto-fixer.d.ts +14 -0
- package/dist/core/auto-fixer.d.ts.map +1 -0
- package/dist/core/auto-fixer.js +207 -0
- package/dist/core/auto-fixer.js.map +1 -0
- package/dist/core/changelog-generator.d.ts +44 -0
- package/dist/core/changelog-generator.d.ts.map +1 -0
- package/dist/core/changelog-generator.js +222 -0
- package/dist/core/changelog-generator.js.map +1 -0
- package/dist/core/cli-bridge.d.ts +113 -0
- package/dist/core/cli-bridge.d.ts.map +1 -0
- package/dist/core/cli-bridge.js +1094 -0
- package/dist/core/cli-bridge.js.map +1 -0
- package/dist/core/config-manager.d.ts +65 -0
- package/dist/core/config-manager.d.ts.map +1 -0
- package/dist/core/config-manager.js +266 -0
- package/dist/core/config-manager.js.map +1 -0
- package/dist/core/coverage-checker.d.ts +14 -0
- package/dist/core/coverage-checker.d.ts.map +1 -0
- package/dist/core/coverage-checker.js +176 -0
- package/dist/core/coverage-checker.js.map +1 -0
- package/dist/core/custom-templates.d.ts +27 -0
- package/dist/core/custom-templates.d.ts.map +1 -0
- package/dist/core/custom-templates.js +122 -0
- package/dist/core/custom-templates.js.map +1 -0
- package/dist/core/dependency-checker.d.ts +21 -0
- package/dist/core/dependency-checker.d.ts.map +1 -0
- package/dist/core/dependency-checker.js +247 -0
- package/dist/core/dependency-checker.js.map +1 -0
- package/dist/core/detector.d.ts +3 -0
- package/dist/core/detector.d.ts.map +1 -0
- package/dist/core/detector.js +1443 -0
- package/dist/core/detector.js.map +1 -0
- package/dist/core/docs-generator.d.ts +9 -0
- package/dist/core/docs-generator.d.ts.map +1 -0
- package/dist/core/docs-generator.js +531 -0
- package/dist/core/docs-generator.js.map +1 -0
- package/dist/core/generator.d.ts +16 -0
- package/dist/core/generator.d.ts.map +1 -0
- package/dist/core/generator.js +561 -0
- package/dist/core/generator.js.map +1 -0
- package/dist/core/gitignore-generator.d.ts +13 -0
- package/dist/core/gitignore-generator.d.ts.map +1 -0
- package/dist/core/gitignore-generator.js +307 -0
- package/dist/core/gitignore-generator.js.map +1 -0
- package/dist/core/health-scorer.d.ts +22 -0
- package/dist/core/health-scorer.d.ts.map +1 -0
- package/dist/core/health-scorer.js +395 -0
- package/dist/core/health-scorer.js.map +1 -0
- package/dist/core/logger.d.ts +116 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +289 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/merger.d.ts +6 -0
- package/dist/core/merger.d.ts.map +1 -0
- package/dist/core/merger.js +131 -0
- package/dist/core/merger.js.map +1 -0
- package/dist/core/migrator.d.ts +19 -0
- package/dist/core/migrator.d.ts.map +1 -0
- package/dist/core/migrator.js +102 -0
- package/dist/core/migrator.js.map +1 -0
- package/dist/core/minimal-scaffolder.d.ts +8 -0
- package/dist/core/minimal-scaffolder.d.ts.map +1 -0
- package/dist/core/minimal-scaffolder.js +51 -0
- package/dist/core/minimal-scaffolder.js.map +1 -0
- package/dist/core/modern-console-new.d.ts +81 -0
- package/dist/core/modern-console-new.d.ts.map +1 -0
- package/dist/core/modern-console-new.js +340 -0
- package/dist/core/modern-console-new.js.map +1 -0
- package/dist/core/modern-console.d.ts +99 -0
- package/dist/core/modern-console.d.ts.map +1 -0
- package/dist/core/modern-console.js +568 -0
- package/dist/core/modern-console.js.map +1 -0
- package/dist/core/openspec-manager.d.ts +133 -0
- package/dist/core/openspec-manager.d.ts.map +1 -0
- package/dist/core/openspec-manager.js +605 -0
- package/dist/core/openspec-manager.js.map +1 -0
- package/dist/core/openspec-migrator.d.ts +27 -0
- package/dist/core/openspec-migrator.d.ts.map +1 -0
- package/dist/core/openspec-migrator.js +255 -0
- package/dist/core/openspec-migrator.js.map +1 -0
- package/dist/core/task-manager.d.ts +65 -0
- package/dist/core/task-manager.d.ts.map +1 -0
- package/dist/core/task-manager.js +318 -0
- package/dist/core/task-manager.js.map +1 -0
- package/dist/core/test-task-manager.d.ts +49 -0
- package/dist/core/test-task-manager.d.ts.map +1 -0
- package/dist/core/test-task-manager.js +121 -0
- package/dist/core/test-task-manager.js.map +1 -0
- package/dist/core/validator.d.ts +21 -0
- package/dist/core/validator.d.ts.map +1 -0
- package/dist/core/validator.js +177 -0
- package/dist/core/validator.js.map +1 -0
- package/dist/core/version-bumper.d.ts +19 -0
- package/dist/core/version-bumper.d.ts.map +1 -0
- package/dist/core/version-bumper.js +180 -0
- package/dist/core/version-bumper.js.map +1 -0
- package/dist/core/watcher.d.ts +9 -0
- package/dist/core/watcher.d.ts.map +1 -0
- package/dist/core/watcher.js +22 -0
- package/dist/core/watcher.js.map +1 -0
- package/dist/core/workflow-generator.d.ts +10 -0
- package/dist/core/workflow-generator.d.ts.map +1 -0
- package/dist/core/workflow-generator.js +279 -0
- package/dist/core/workflow-generator.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +159 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/handlers/archive-task.d.ts +17 -0
- package/dist/mcp/handlers/archive-task.d.ts.map +1 -0
- package/dist/mcp/handlers/archive-task.js +36 -0
- package/dist/mcp/handlers/archive-task.js.map +1 -0
- package/dist/mcp/handlers/create-task.d.ts +17 -0
- package/dist/mcp/handlers/create-task.d.ts.map +1 -0
- package/dist/mcp/handlers/create-task.js +56 -0
- package/dist/mcp/handlers/create-task.js.map +1 -0
- package/dist/mcp/handlers/list-tasks.d.ts +22 -0
- package/dist/mcp/handlers/list-tasks.d.ts.map +1 -0
- package/dist/mcp/handlers/list-tasks.js +42 -0
- package/dist/mcp/handlers/list-tasks.js.map +1 -0
- package/dist/mcp/handlers/show-task.d.ts +25 -0
- package/dist/mcp/handlers/show-task.d.ts.map +1 -0
- package/dist/mcp/handlers/show-task.js +43 -0
- package/dist/mcp/handlers/show-task.js.map +1 -0
- package/dist/mcp/handlers/update-task.d.ts +17 -0
- package/dist/mcp/handlers/update-task.d.ts.map +1 -0
- package/dist/mcp/handlers/update-task.js +35 -0
- package/dist/mcp/handlers/update-task.js.map +1 -0
- package/dist/mcp/handlers/validate-task.d.ts +15 -0
- package/dist/mcp/handlers/validate-task.d.ts.map +1 -0
- package/dist/mcp/handlers/validate-task.js +27 -0
- package/dist/mcp/handlers/validate-task.js.map +1 -0
- package/dist/mcp/rulebook-config.d.ts +22 -0
- package/dist/mcp/rulebook-config.d.ts.map +1 -0
- package/dist/mcp/rulebook-config.js +65 -0
- package/dist/mcp/rulebook-config.js.map +1 -0
- package/dist/mcp/rulebook-server.d.ts +4 -0
- package/dist/mcp/rulebook-server.d.ts.map +1 -0
- package/dist/mcp/rulebook-server.js +246 -0
- package/dist/mcp/rulebook-server.js.map +1 -0
- package/dist/types.d.ts +190 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/file-system.d.ts +9 -0
- package/dist/utils/file-system.d.ts.map +1 -0
- package/dist/utils/file-system.js +51 -0
- package/dist/utils/file-system.js.map +1 -0
- package/dist/utils/git-hooks.d.ts +8 -0
- package/dist/utils/git-hooks.d.ts.map +1 -0
- package/dist/utils/git-hooks.js +440 -0
- package/dist/utils/git-hooks.js.map +1 -0
- package/dist/utils/rulesignore.d.ts +9 -0
- package/dist/utils/rulesignore.d.ts.map +1 -0
- package/dist/utils/rulesignore.js +42 -0
- package/dist/utils/rulesignore.js.map +1 -0
- package/package.json +106 -0
- package/templates/cli/AIDER.md +49 -0
- package/templates/cli/AMAZON_Q.md +25 -0
- package/templates/cli/AUGGIE.md +32 -0
- package/templates/cli/CLAUDE.md +32 -0
- package/templates/cli/CLAUDE_CODE.md +35 -0
- package/templates/cli/CLINE.md +32 -0
- package/templates/cli/CODEBUDDY.md +20 -0
- package/templates/cli/CODEIUM.md +20 -0
- package/templates/cli/CODEX.md +21 -0
- package/templates/cli/CONTINUE.md +34 -0
- package/templates/cli/CURSOR_CLI.md +28 -0
- package/templates/cli/FACTORY.md +18 -0
- package/templates/cli/GEMINI.md +35 -0
- package/templates/cli/KILOCODE.md +18 -0
- package/templates/cli/OPENCODE.md +18 -0
- package/templates/cli/_GENERIC_TEMPLATE.md +29 -0
- package/templates/commands/rulebook-task-apply.md +67 -0
- package/templates/commands/rulebook-task-archive.md +70 -0
- package/templates/commands/rulebook-task-create.md +93 -0
- package/templates/commands/rulebook-task-list.md +42 -0
- package/templates/commands/rulebook-task-show.md +52 -0
- package/templates/commands/rulebook-task-validate.md +53 -0
- package/templates/core/AGENT_AUTOMATION.md +184 -0
- package/templates/core/DAG.md +304 -0
- package/templates/core/DOCUMENTATION_RULES.md +37 -0
- package/templates/core/QUALITY_ENFORCEMENT.md +68 -0
- package/templates/core/RULEBOOK.md +1874 -0
- package/templates/frameworks/ANGULAR.md +36 -0
- package/templates/frameworks/DJANGO.md +83 -0
- package/templates/frameworks/ELECTRON.md +147 -0
- package/templates/frameworks/FLASK.md +38 -0
- package/templates/frameworks/FLUTTER.md +55 -0
- package/templates/frameworks/JQUERY.md +32 -0
- package/templates/frameworks/LARAVEL.md +38 -0
- package/templates/frameworks/NESTJS.md +43 -0
- package/templates/frameworks/NEXTJS.md +127 -0
- package/templates/frameworks/NUXT.md +40 -0
- package/templates/frameworks/RAILS.md +66 -0
- package/templates/frameworks/REACT.md +38 -0
- package/templates/frameworks/REACT_NATIVE.md +47 -0
- package/templates/frameworks/SPRING.md +39 -0
- package/templates/frameworks/SYMFONY.md +36 -0
- package/templates/frameworks/VUE.md +36 -0
- package/templates/frameworks/ZEND.md +35 -0
- package/templates/git/CI_CD_PATTERNS.md +661 -0
- package/templates/git/GITHUB_ACTIONS.md +728 -0
- package/templates/git/GITLAB_CI.md +730 -0
- package/templates/git/GIT_WORKFLOW.md +1157 -0
- package/templates/git/SECRETS_MANAGEMENT.md +585 -0
- package/templates/hooks/COMMIT_MSG.md +530 -0
- package/templates/hooks/POST_CHECKOUT.md +546 -0
- package/templates/hooks/PREPARE_COMMIT_MSG.md +619 -0
- package/templates/hooks/PRE_COMMIT.md +414 -0
- package/templates/hooks/PRE_PUSH.md +601 -0
- package/templates/hooks/csharp-pre-commit.sh +23 -0
- package/templates/hooks/csharp-pre-push.sh +23 -0
- package/templates/hooks/dart-pre-commit.sh +30 -0
- package/templates/hooks/dart-pre-push.sh +25 -0
- package/templates/hooks/elixir-pre-commit.sh +32 -0
- package/templates/hooks/elixir-pre-push.sh +31 -0
- package/templates/hooks/erlang-pre-commit.sh +30 -0
- package/templates/hooks/erlang-pre-push.sh +37 -0
- package/templates/hooks/go-pre-commit.sh +40 -0
- package/templates/hooks/go-pre-push.sh +31 -0
- package/templates/hooks/haskell-pre-commit.sh +41 -0
- package/templates/hooks/haskell-pre-push.sh +37 -0
- package/templates/hooks/java-pre-commit.sh +34 -0
- package/templates/hooks/java-pre-push.sh +24 -0
- package/templates/hooks/kotlin-pre-commit.sh +32 -0
- package/templates/hooks/kotlin-pre-push.sh +16 -0
- package/templates/hooks/php-pre-commit.sh +36 -0
- package/templates/hooks/php-pre-push.sh +26 -0
- package/templates/hooks/python-pre-commit.sh +51 -0
- package/templates/hooks/python-pre-push.sh +25 -0
- package/templates/hooks/ruby-pre-commit.sh +33 -0
- package/templates/hooks/ruby-pre-push.sh +32 -0
- package/templates/hooks/rust-pre-commit.sh +30 -0
- package/templates/hooks/rust-pre-push.sh +30 -0
- package/templates/hooks/scala-pre-commit.sh +32 -0
- package/templates/hooks/scala-pre-push.sh +24 -0
- package/templates/hooks/swift-pre-commit.sh +25 -0
- package/templates/hooks/swift-pre-push.sh +23 -0
- package/templates/hooks/typescript-pre-commit.sh +37 -0
- package/templates/hooks/typescript-pre-push.sh +36 -0
- package/templates/ides/COPILOT.md +37 -0
- package/templates/ides/CURSOR.md +43 -0
- package/templates/ides/JETBRAINS_AI.md +35 -0
- package/templates/ides/REPLIT.md +36 -0
- package/templates/ides/TABNINE.md +29 -0
- package/templates/ides/VSCODE.md +40 -0
- package/templates/ides/WINDSURF.md +36 -0
- package/templates/ides/ZED.md +32 -0
- package/templates/languages/ADA.md +58 -0
- package/templates/languages/C.md +333 -0
- package/templates/languages/CPP.md +743 -0
- package/templates/languages/CSHARP.md +417 -0
- package/templates/languages/DART.md +332 -0
- package/templates/languages/ELIXIR.md +454 -0
- package/templates/languages/ERLANG.md +361 -0
- package/templates/languages/GO.md +645 -0
- package/templates/languages/HASKELL.md +177 -0
- package/templates/languages/JAVA.md +607 -0
- package/templates/languages/JAVASCRIPT.md +631 -0
- package/templates/languages/JULIA.md +97 -0
- package/templates/languages/KOTLIN.md +511 -0
- package/templates/languages/LISP.md +100 -0
- package/templates/languages/LUA.md +74 -0
- package/templates/languages/OBJECTIVEC.md +90 -0
- package/templates/languages/PHP.md +416 -0
- package/templates/languages/PYTHON.md +682 -0
- package/templates/languages/R.md +350 -0
- package/templates/languages/RUBY.md +421 -0
- package/templates/languages/RUST.md +477 -0
- package/templates/languages/SAS.md +73 -0
- package/templates/languages/SCALA.md +348 -0
- package/templates/languages/SOLIDITY.md +580 -0
- package/templates/languages/SQL.md +137 -0
- package/templates/languages/SWIFT.md +466 -0
- package/templates/languages/TYPESCRIPT.md +591 -0
- package/templates/languages/ZIG.md +265 -0
- package/templates/modules/ATLASSIAN.md +255 -0
- package/templates/modules/CONTEXT7.md +54 -0
- package/templates/modules/FIGMA.md +267 -0
- package/templates/modules/GITHUB_MCP.md +64 -0
- package/templates/modules/GRAFANA.md +328 -0
- package/templates/modules/NOTION.md +247 -0
- package/templates/modules/PLAYWRIGHT.md +90 -0
- package/templates/modules/RULEBOOK_MCP.md +156 -0
- package/templates/modules/SERENA.md +337 -0
- package/templates/modules/SUPABASE.md +223 -0
- package/templates/modules/SYNAP.md +69 -0
- package/templates/modules/VECTORIZER.md +63 -0
- package/templates/services/AZURE_BLOB.md +184 -0
- package/templates/services/CASSANDRA.md +239 -0
- package/templates/services/DYNAMODB.md +308 -0
- package/templates/services/ELASTICSEARCH.md +347 -0
- package/templates/services/GCS.md +178 -0
- package/templates/services/INFLUXDB.md +265 -0
- package/templates/services/KAFKA.md +341 -0
- package/templates/services/MARIADB.md +183 -0
- package/templates/services/MEMCACHED.md +242 -0
- package/templates/services/MINIO.md +201 -0
- package/templates/services/MONGODB.md +268 -0
- package/templates/services/MYSQL.md +358 -0
- package/templates/services/NEO4J.md +247 -0
- package/templates/services/ORACLE.md +290 -0
- package/templates/services/POSTGRESQL.md +326 -0
- package/templates/services/RABBITMQ.md +286 -0
- package/templates/services/REDIS.md +292 -0
- package/templates/services/S3.md +298 -0
- package/templates/services/SQLITE.md +294 -0
- package/templates/services/SQLSERVER.md +294 -0
- package/templates/workflows/codespell.yml +31 -0
- package/templates/workflows/cpp-lint.yml +47 -0
- package/templates/workflows/cpp-publish.yml +119 -0
- package/templates/workflows/cpp-test.yml +77 -0
- package/templates/workflows/dotnet-lint.yml +29 -0
- package/templates/workflows/dotnet-publish.yml +40 -0
- package/templates/workflows/dotnet-test.yml +41 -0
- package/templates/workflows/elixir-lint.yml +45 -0
- package/templates/workflows/elixir-publish.yml +49 -0
- package/templates/workflows/elixir-test.yml +54 -0
- package/templates/workflows/erlang-lint.yml +47 -0
- package/templates/workflows/erlang-test.yml +62 -0
- package/templates/workflows/go-lint.yml +39 -0
- package/templates/workflows/go-publish.yml +95 -0
- package/templates/workflows/go-test.yml +59 -0
- package/templates/workflows/java-lint.yml +60 -0
- package/templates/workflows/java-publish.yml +120 -0
- package/templates/workflows/java-test.yml +85 -0
- package/templates/workflows/kotlin-lint.yml +34 -0
- package/templates/workflows/kotlin-publish.yml +56 -0
- package/templates/workflows/kotlin-test.yml +48 -0
- package/templates/workflows/php-lint.yml +39 -0
- package/templates/workflows/php-publish.yml +50 -0
- package/templates/workflows/php-test.yml +54 -0
- package/templates/workflows/python-lint.yml +47 -0
- package/templates/workflows/python-publish.yml +91 -0
- package/templates/workflows/python-test.yml +59 -0
- package/templates/workflows/rust-lint.yml +54 -0
- package/templates/workflows/rust-publish.yml +66 -0
- package/templates/workflows/rust-test.yml +75 -0
- package/templates/workflows/solidity-lint.yml +41 -0
- package/templates/workflows/solidity-test.yml +47 -0
- package/templates/workflows/swift-lint.yml +32 -0
- package/templates/workflows/swift-publish.yml +58 -0
- package/templates/workflows/swift-test.yml +44 -0
- package/templates/workflows/typescript-lint.yml +61 -0
- package/templates/workflows/typescript-publish.yml +60 -0
- package/templates/workflows/typescript-test.yml +73 -0
- package/templates/workflows/zig-lint.yml +27 -0
- package/templates/workflows/zig-test.yml +40 -0
|
@@ -0,0 +1,607 @@
|
|
|
1
|
+
<!-- JAVA:START -->
|
|
2
|
+
# Java Project Rules
|
|
3
|
+
|
|
4
|
+
## Agent Automation Commands
|
|
5
|
+
|
|
6
|
+
**CRITICAL**: Execute these commands after EVERY implementation (see AGENT_AUTOMATION module for full workflow).
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
# Maven projects:
|
|
10
|
+
mvn spotless:check # Format check
|
|
11
|
+
mvn checkstyle:check # Linting
|
|
12
|
+
mvn test # All tests (100% pass)
|
|
13
|
+
mvn package -DskipTests # Build
|
|
14
|
+
mvn jacoco:check # Coverage (95%+ required)
|
|
15
|
+
|
|
16
|
+
# Security audit:
|
|
17
|
+
mvn dependency:analyze # Dependency check
|
|
18
|
+
mvn versions:display-dependency-updates # Outdated deps
|
|
19
|
+
|
|
20
|
+
# Gradle projects:
|
|
21
|
+
./gradlew spotlessCheck # Format check
|
|
22
|
+
./gradlew checkstyleMain # Linting
|
|
23
|
+
./gradlew test # All tests
|
|
24
|
+
./gradlew build -x test # Build
|
|
25
|
+
./gradlew jacocoTestCoverageVerification # Coverage
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Java Version
|
|
29
|
+
|
|
30
|
+
**CRITICAL**: Use Java 17 LTS or Java 21 LTS for modern features and long-term support.
|
|
31
|
+
|
|
32
|
+
- **Minimum Version**: Java 17 LTS
|
|
33
|
+
- **Recommended**: Java 21 LTS
|
|
34
|
+
- **Build Tool**: Maven or Gradle
|
|
35
|
+
|
|
36
|
+
### Formatting
|
|
37
|
+
|
|
38
|
+
- Use Spotless or Google Java Format
|
|
39
|
+
- Consistent formatting across entire project
|
|
40
|
+
- Format before committing
|
|
41
|
+
|
|
42
|
+
Maven configuration (`pom.xml`):
|
|
43
|
+
```xml
|
|
44
|
+
<plugin>
|
|
45
|
+
<groupId>com.diffplug.spotless</groupId>
|
|
46
|
+
<artifactId>spotless-maven-plugin</artifactId>
|
|
47
|
+
<version>2.40.0</version>
|
|
48
|
+
<configuration>
|
|
49
|
+
<java>
|
|
50
|
+
<googleJavaFormat>
|
|
51
|
+
<version>1.17.0</version>
|
|
52
|
+
<style>GOOGLE</style>
|
|
53
|
+
</googleJavaFormat>
|
|
54
|
+
</java>
|
|
55
|
+
</configuration>
|
|
56
|
+
</plugin>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Gradle configuration (`build.gradle`):
|
|
60
|
+
```gradle
|
|
61
|
+
plugins {
|
|
62
|
+
id 'com.diffplug.spotless' version '6.23.0'
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
spotless {
|
|
66
|
+
java {
|
|
67
|
+
googleJavaFormat('1.17.0').aosp()
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Linting
|
|
73
|
+
|
|
74
|
+
- Use Checkstyle for style checks
|
|
75
|
+
- Use PMD for code quality
|
|
76
|
+
- Use SpotBugs for bug detection
|
|
77
|
+
- Configure in `checkstyle.xml`, `pmd.xml`
|
|
78
|
+
|
|
79
|
+
### Testing
|
|
80
|
+
|
|
81
|
+
- **Framework**: JUnit 5 (JUnit Jupiter)
|
|
82
|
+
- **Location**: `src/test/java`
|
|
83
|
+
- **Coverage**: Must meet project threshold (default 95%)
|
|
84
|
+
- **Assertions**: Use AssertJ or JUnit assertions
|
|
85
|
+
- **Mocking**: Use Mockito when needed
|
|
86
|
+
|
|
87
|
+
Example test structure:
|
|
88
|
+
```java
|
|
89
|
+
package com.example.myapp;
|
|
90
|
+
|
|
91
|
+
import org.junit.jupiter.api.Test;
|
|
92
|
+
import org.junit.jupiter.api.BeforeEach;
|
|
93
|
+
import org.junit.jupiter.api.DisplayName;
|
|
94
|
+
import static org.assertj.core.api.Assertions.*;
|
|
95
|
+
|
|
96
|
+
class UserServiceTest {
|
|
97
|
+
|
|
98
|
+
private UserService userService;
|
|
99
|
+
|
|
100
|
+
@BeforeEach
|
|
101
|
+
void setUp() {
|
|
102
|
+
userService = new UserService();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
@Test
|
|
106
|
+
@DisplayName("Should create user with valid data")
|
|
107
|
+
void shouldCreateUserWithValidData() {
|
|
108
|
+
// Given
|
|
109
|
+
UserInput input = new UserInput("test@example.com", "password");
|
|
110
|
+
|
|
111
|
+
// When
|
|
112
|
+
User user = userService.createUser(input);
|
|
113
|
+
|
|
114
|
+
// Then
|
|
115
|
+
assertThat(user).isNotNull();
|
|
116
|
+
assertThat(user.getEmail()).isEqualTo("test@example.com");
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
@Test
|
|
120
|
+
@DisplayName("Should throw exception for invalid email")
|
|
121
|
+
void shouldThrowExceptionForInvalidEmail() {
|
|
122
|
+
// Given
|
|
123
|
+
UserInput input = new UserInput("invalid", "password");
|
|
124
|
+
|
|
125
|
+
// When/Then
|
|
126
|
+
assertThatThrownBy(() -> userService.createUser(input))
|
|
127
|
+
.isInstanceOf(ValidationException.class)
|
|
128
|
+
.hasMessageContaining("Invalid email");
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Dependency Management
|
|
134
|
+
|
|
135
|
+
**CRITICAL**: Use Maven or Gradle with dependency management.
|
|
136
|
+
|
|
137
|
+
### Maven (pom.xml)
|
|
138
|
+
|
|
139
|
+
```xml
|
|
140
|
+
<properties>
|
|
141
|
+
<java.version>21</java.version>
|
|
142
|
+
<maven.compiler.source>21</maven.compiler.source>
|
|
143
|
+
<maven.compiler.target>21</maven.compiler.target>
|
|
144
|
+
</properties>
|
|
145
|
+
|
|
146
|
+
<dependencies>
|
|
147
|
+
<dependency>
|
|
148
|
+
<groupId>org.springframework.boot</groupId>
|
|
149
|
+
<artifactId>spring-boot-starter</artifactId>
|
|
150
|
+
<version>3.2.0</version>
|
|
151
|
+
</dependency>
|
|
152
|
+
|
|
153
|
+
<!-- Testing -->
|
|
154
|
+
<dependency>
|
|
155
|
+
<groupId>org.junit.jupiter</groupId>
|
|
156
|
+
<artifactId>junit-jupiter</artifactId>
|
|
157
|
+
<version>5.10.1</version>
|
|
158
|
+
<scope>test</scope>
|
|
159
|
+
</dependency>
|
|
160
|
+
</dependencies>
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Gradle (build.gradle)
|
|
164
|
+
|
|
165
|
+
```gradle
|
|
166
|
+
plugins {
|
|
167
|
+
id 'java'
|
|
168
|
+
id 'org.springframework.boot' version '3.2.0'
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
java {
|
|
172
|
+
sourceCompatibility = JavaVersion.VERSION_21
|
|
173
|
+
targetCompatibility = JavaVersion.VERSION_21
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
dependencies {
|
|
177
|
+
implementation 'org.springframework.boot:spring-boot-starter'
|
|
178
|
+
|
|
179
|
+
testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1'
|
|
180
|
+
testImplementation 'org.assertj:assertj-core:3.24.2'
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
test {
|
|
184
|
+
useJUnitPlatform()
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Dependency Guidelines
|
|
189
|
+
|
|
190
|
+
1. **Check for latest versions**:
|
|
191
|
+
- Use Context7 MCP tool if available
|
|
192
|
+
- Check Maven Central for latest releases
|
|
193
|
+
- Review changelog for breaking changes
|
|
194
|
+
|
|
195
|
+
2. **Version Management**:
|
|
196
|
+
- ✅ Use BOM (Bill of Materials) for version consistency
|
|
197
|
+
- ✅ Keep dependencies updated regularly
|
|
198
|
+
- ✅ Use dependency management in parent POM
|
|
199
|
+
- ❌ Don't use SNAPSHOT in production
|
|
200
|
+
- ❌ Don't use vulnerable dependencies
|
|
201
|
+
|
|
202
|
+
## Error Handling
|
|
203
|
+
|
|
204
|
+
- Use exceptions for exceptional cases only
|
|
205
|
+
- Create custom exceptions extending RuntimeException or Exception
|
|
206
|
+
- Use try-with-resources for resource management
|
|
207
|
+
- Log errors appropriately
|
|
208
|
+
- Never catch and ignore exceptions
|
|
209
|
+
|
|
210
|
+
Example:
|
|
211
|
+
```java
|
|
212
|
+
public class UserService {
|
|
213
|
+
|
|
214
|
+
public User createUser(UserInput input) throws ValidationException {
|
|
215
|
+
if (input.getEmail() == null || input.getEmail().isEmpty()) {
|
|
216
|
+
throw new ValidationException("Email is required");
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
try {
|
|
220
|
+
return userRepository.save(input);
|
|
221
|
+
} catch (DataAccessException e) {
|
|
222
|
+
throw new ServiceException("Failed to create user", e);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
public class ValidationException extends RuntimeException {
|
|
228
|
+
public ValidationException(String message) {
|
|
229
|
+
super(message);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
## Documentation
|
|
235
|
+
|
|
236
|
+
- **Javadoc**: Document all public APIs
|
|
237
|
+
- **Package Info**: Create `package-info.java`
|
|
238
|
+
- **Examples**: Include usage examples
|
|
239
|
+
- **Generate**: `mvn javadoc:javadoc` or `./gradlew javadoc`
|
|
240
|
+
|
|
241
|
+
Example:
|
|
242
|
+
```java
|
|
243
|
+
/**
|
|
244
|
+
* Processes user data and returns validated result.
|
|
245
|
+
*
|
|
246
|
+
* <p>This method validates the input data according to business rules
|
|
247
|
+
* and returns a validated User object. If validation fails, it throws
|
|
248
|
+
* a ValidationException with details about the failure.
|
|
249
|
+
*
|
|
250
|
+
* @param input the user input data to process
|
|
251
|
+
* @return validated User object
|
|
252
|
+
* @throws ValidationException if input validation fails
|
|
253
|
+
* @throws ServiceException if database operation fails
|
|
254
|
+
*
|
|
255
|
+
* @see UserInput
|
|
256
|
+
* @see ValidationException
|
|
257
|
+
*
|
|
258
|
+
* @since 1.0.0
|
|
259
|
+
*/
|
|
260
|
+
public User processUser(UserInput input) throws ValidationException {
|
|
261
|
+
// Implementation
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
## Project Structure
|
|
267
|
+
|
|
268
|
+
```
|
|
269
|
+
project/
|
|
270
|
+
├── pom.xml # Maven config (or build.gradle)
|
|
271
|
+
├── README.md # Project overview (allowed in root)
|
|
272
|
+
├── CHANGELOG.md # Version history (allowed in root)
|
|
273
|
+
├── AGENTS.md # AI assistant rules (allowed in root)
|
|
274
|
+
├── LICENSE # Project license (allowed in root)
|
|
275
|
+
├── CONTRIBUTING.md # Contribution guidelines (allowed in root)
|
|
276
|
+
├── CODE_OF_CONDUCT.md # Code of conduct (allowed in root)
|
|
277
|
+
├── SECURITY.md # Security policy (allowed in root)
|
|
278
|
+
├── src/
|
|
279
|
+
│ ├── main/
|
|
280
|
+
│ │ ├── java/
|
|
281
|
+
│ │ │ └── com/example/
|
|
282
|
+
│ │ │ ├── Application.java
|
|
283
|
+
│ │ │ ├── controller/
|
|
284
|
+
│ │ │ ├── service/
|
|
285
|
+
│ │ │ └── repository/
|
|
286
|
+
│ │ └── resources/
|
|
287
|
+
│ │ └── application.properties
|
|
288
|
+
│ └── test/
|
|
289
|
+
│ ├── java/
|
|
290
|
+
│ │ └── com/example/
|
|
291
|
+
│ │ ├── service/
|
|
292
|
+
│ │ └── repository/
|
|
293
|
+
│ └── resources/
|
|
294
|
+
├── target/ # Build output (gitignored)
|
|
295
|
+
└── docs/ # Documentation
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
## Modern Java Features
|
|
299
|
+
|
|
300
|
+
### Records (Java 14+)
|
|
301
|
+
|
|
302
|
+
```java
|
|
303
|
+
public record User(String email, String name, LocalDateTime createdAt) {
|
|
304
|
+
// Compact constructor
|
|
305
|
+
public User {
|
|
306
|
+
if (email == null || email.isEmpty()) {
|
|
307
|
+
throw new IllegalArgumentException("Email required");
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
### Pattern Matching (Java 17+)
|
|
314
|
+
|
|
315
|
+
```java
|
|
316
|
+
public String processValue(Object value) {
|
|
317
|
+
return switch (value) {
|
|
318
|
+
case String s -> "String: " + s;
|
|
319
|
+
case Integer i -> "Integer: " + i;
|
|
320
|
+
case null -> "Null value";
|
|
321
|
+
default -> "Unknown type";
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
### Sealed Classes (Java 17+)
|
|
327
|
+
|
|
328
|
+
```java
|
|
329
|
+
public sealed interface Result<T, E> permits Success, Failure {
|
|
330
|
+
// Interface definition
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
public record Success<T, E>(T value) implements Result<T, E> {}
|
|
334
|
+
public record Failure<T, E>(E error) implements Result<T, E> {}
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
## CI/CD Requirements
|
|
338
|
+
|
|
339
|
+
Must include GitHub Actions workflows for:
|
|
340
|
+
|
|
341
|
+
1. **Testing** (`java-test.yml`):
|
|
342
|
+
- Test on ubuntu-latest, windows-latest
|
|
343
|
+
- Test on Java 17, 21
|
|
344
|
+
- Upload coverage to Codecov
|
|
345
|
+
|
|
346
|
+
2. **Linting** (`java-lint.yml`):
|
|
347
|
+
- Checkstyle checks
|
|
348
|
+
- PMD analysis
|
|
349
|
+
- SpotBugs detection
|
|
350
|
+
|
|
351
|
+
3. **Build** (`java-build.yml`):
|
|
352
|
+
- Build with Maven/Gradle
|
|
353
|
+
- Verify JAR creation
|
|
354
|
+
- Check dependencies
|
|
355
|
+
|
|
356
|
+
## Package Publication
|
|
357
|
+
|
|
358
|
+
### Publishing to Maven Central
|
|
359
|
+
|
|
360
|
+
**Prerequisites:**
|
|
361
|
+
1. Sonatype OSSRH account (https://issues.sonatype.org)
|
|
362
|
+
2. GPG key for signing
|
|
363
|
+
3. Group ID approval (e.g., `io.github.username`)
|
|
364
|
+
4. Add credentials to GitHub Secrets
|
|
365
|
+
|
|
366
|
+
**Maven (pom.xml) Configuration:**
|
|
367
|
+
|
|
368
|
+
```xml
|
|
369
|
+
<project>
|
|
370
|
+
<modelVersion>4.0.0</modelVersion>
|
|
371
|
+
|
|
372
|
+
<groupId>io.github.your-username</groupId>
|
|
373
|
+
<artifactId>your-library</artifactId>
|
|
374
|
+
<version>1.0.0</version>
|
|
375
|
+
<packaging>jar</packaging>
|
|
376
|
+
|
|
377
|
+
<name>Your Library</name>
|
|
378
|
+
<description>A concise description of your library</description>
|
|
379
|
+
<url>https://github.com/your-org/your-library</url>
|
|
380
|
+
|
|
381
|
+
<licenses>
|
|
382
|
+
<license>
|
|
383
|
+
<name>MIT License</name>
|
|
384
|
+
<url>https://opensource.org/licenses/MIT</url>
|
|
385
|
+
</license>
|
|
386
|
+
</licenses>
|
|
387
|
+
|
|
388
|
+
<developers>
|
|
389
|
+
<developer>
|
|
390
|
+
<name>Your Name</name>
|
|
391
|
+
<email>your.email@example.com</email>
|
|
392
|
+
<organization>Your Organization</organization>
|
|
393
|
+
<organizationUrl>https://your-org.com</organizationUrl>
|
|
394
|
+
</developer>
|
|
395
|
+
</developers>
|
|
396
|
+
|
|
397
|
+
<scm>
|
|
398
|
+
<connection>scm:git:git://github.com/your-org/your-library.git</connection>
|
|
399
|
+
<developerConnection>scm:git:ssh://github.com:your-org/your-library.git</developerConnection>
|
|
400
|
+
<url>https://github.com/your-org/your-library/tree/main</url>
|
|
401
|
+
</scm>
|
|
402
|
+
|
|
403
|
+
<distributionManagement>
|
|
404
|
+
<repository>
|
|
405
|
+
<id>ossrh</id>
|
|
406
|
+
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
|
|
407
|
+
</repository>
|
|
408
|
+
</distributionManagement>
|
|
409
|
+
|
|
410
|
+
<build>
|
|
411
|
+
<plugins>
|
|
412
|
+
<!-- Source JAR -->
|
|
413
|
+
<plugin>
|
|
414
|
+
<groupId>org.apache.maven.plugins</groupId>
|
|
415
|
+
<artifactId>maven-source-plugin</artifactId>
|
|
416
|
+
<version>3.3.0</version>
|
|
417
|
+
<executions>
|
|
418
|
+
<execution>
|
|
419
|
+
<id>attach-sources</id>
|
|
420
|
+
<goals>
|
|
421
|
+
<goal>jar-no-fork</goal>
|
|
422
|
+
</goals>
|
|
423
|
+
</execution>
|
|
424
|
+
</executions>
|
|
425
|
+
</plugin>
|
|
426
|
+
|
|
427
|
+
<!-- Javadoc JAR -->
|
|
428
|
+
<plugin>
|
|
429
|
+
<groupId>org.apache.maven.plugins</groupId>
|
|
430
|
+
<artifactId>maven-javadoc-plugin</artifactId>
|
|
431
|
+
<version>3.6.3</version>
|
|
432
|
+
<executions>
|
|
433
|
+
<execution>
|
|
434
|
+
<id>attach-javadocs</id>
|
|
435
|
+
<goals>
|
|
436
|
+
<goal>jar</goal>
|
|
437
|
+
</goals>
|
|
438
|
+
</execution>
|
|
439
|
+
</executions>
|
|
440
|
+
</plugin>
|
|
441
|
+
|
|
442
|
+
<!-- GPG Signing -->
|
|
443
|
+
<plugin>
|
|
444
|
+
<groupId>org.apache.maven.plugins</groupId>
|
|
445
|
+
<artifactId>maven-gpg-plugin</artifactId>
|
|
446
|
+
<version>3.1.0</version>
|
|
447
|
+
<executions>
|
|
448
|
+
<execution>
|
|
449
|
+
<id>sign-artifacts</id>
|
|
450
|
+
<phase>verify</phase>
|
|
451
|
+
<goals>
|
|
452
|
+
<goal>sign</goal>
|
|
453
|
+
</goals>
|
|
454
|
+
</execution>
|
|
455
|
+
</executions>
|
|
456
|
+
</plugin>
|
|
457
|
+
</plugins>
|
|
458
|
+
</build>
|
|
459
|
+
</project>
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
**Gradle (build.gradle.kts) Configuration:**
|
|
463
|
+
|
|
464
|
+
```kotlin
|
|
465
|
+
plugins {
|
|
466
|
+
`java-library`
|
|
467
|
+
`maven-publish`
|
|
468
|
+
signing
|
|
469
|
+
id("io.github.gradle-nexus.publish-plugin") version "1.3.0"
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
group = "io.github.your-username"
|
|
473
|
+
version = "1.0.0"
|
|
474
|
+
|
|
475
|
+
java {
|
|
476
|
+
sourceCompatibility = JavaVersion.VERSION_17
|
|
477
|
+
targetCompatibility = JavaVersion.VERSION_17
|
|
478
|
+
withSourcesJar()
|
|
479
|
+
withJavadocJar()
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
publishing {
|
|
483
|
+
publications {
|
|
484
|
+
create<MavenPublication>("mavenJava") {
|
|
485
|
+
from(components["java"])
|
|
486
|
+
|
|
487
|
+
pom {
|
|
488
|
+
name.set("Your Library")
|
|
489
|
+
description.set("A concise description of your library")
|
|
490
|
+
url.set("https://github.com/your-org/your-library")
|
|
491
|
+
|
|
492
|
+
licenses {
|
|
493
|
+
license {
|
|
494
|
+
name.set("MIT License")
|
|
495
|
+
url.set("https://opensource.org/licenses/MIT")
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
developers {
|
|
500
|
+
developer {
|
|
501
|
+
id.set("your-username")
|
|
502
|
+
name.set("Your Name")
|
|
503
|
+
email.set("your.email@example.com")
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
scm {
|
|
508
|
+
connection.set("scm:git:git://github.com/your-org/your-library.git")
|
|
509
|
+
developerConnection.set("scm:git:ssh://github.com:your-org/your-library.git")
|
|
510
|
+
url.set("https://github.com/your-org/your-library")
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
signing {
|
|
518
|
+
sign(publishing.publications["mavenJava"])
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
nexusPublishing {
|
|
522
|
+
repositories {
|
|
523
|
+
sonatype {
|
|
524
|
+
nexusUrl.set(uri("https://s01.oss.sonatype.org/service/local/"))
|
|
525
|
+
snapshotRepositoryUrl.set(uri("https://s01.oss.sonatype.org/content/repositories/snapshots/"))
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
**Publishing Workflow:**
|
|
532
|
+
|
|
533
|
+
1. Update version in pom.xml/build.gradle
|
|
534
|
+
2. Update CHANGELOG.md
|
|
535
|
+
3. Run quality checks:
|
|
536
|
+
```bash
|
|
537
|
+
# Maven
|
|
538
|
+
mvn clean test
|
|
539
|
+
mvn checkstyle:check
|
|
540
|
+
mvn pmd:check
|
|
541
|
+
|
|
542
|
+
# Gradle
|
|
543
|
+
./gradlew test
|
|
544
|
+
./gradlew checkstyleMain
|
|
545
|
+
./gradlew pmdMain
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
4. Create git tag: `git tag v1.0.0 && git push --tags`
|
|
549
|
+
5. GitHub Actions automatically publishes to Maven Central
|
|
550
|
+
6. Or manual publish:
|
|
551
|
+
```bash
|
|
552
|
+
# Maven
|
|
553
|
+
mvn clean deploy -P release
|
|
554
|
+
|
|
555
|
+
# Gradle
|
|
556
|
+
./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
**Publishing Checklist:**
|
|
560
|
+
|
|
561
|
+
- ✅ All tests passing
|
|
562
|
+
- ✅ Checkstyle passes
|
|
563
|
+
- ✅ PMD analysis clean
|
|
564
|
+
- ✅ SpotBugs finds no issues
|
|
565
|
+
- ✅ Version updated
|
|
566
|
+
- ✅ CHANGELOG.md updated
|
|
567
|
+
- ✅ README.md up to date
|
|
568
|
+
- ✅ LICENSE file present
|
|
569
|
+
- ✅ Source JAR generated
|
|
570
|
+
- ✅ Javadoc JAR generated
|
|
571
|
+
- ✅ Artifacts signed with GPG
|
|
572
|
+
- ✅ POM metadata complete
|
|
573
|
+
|
|
574
|
+
**GitHub Secrets:**
|
|
575
|
+
|
|
576
|
+
Add these secrets to your repository:
|
|
577
|
+
|
|
578
|
+
- `MAVEN_USERNAME`: Sonatype username
|
|
579
|
+
- `MAVEN_PASSWORD`: Sonatype password
|
|
580
|
+
- `GPG_PRIVATE_KEY`: Your GPG private key (exported as ASCII)
|
|
581
|
+
- `GPG_PASSPHRASE`: GPG key passphrase
|
|
582
|
+
|
|
583
|
+
**Alternative: GitHub Packages**
|
|
584
|
+
|
|
585
|
+
For simpler setup, publish to GitHub Packages:
|
|
586
|
+
|
|
587
|
+
```xml
|
|
588
|
+
<distributionManagement>
|
|
589
|
+
<repository>
|
|
590
|
+
<id>github</id>
|
|
591
|
+
<url>https://maven.pkg.github.com/your-org/your-library</url>
|
|
592
|
+
</repository>
|
|
593
|
+
</distributionManagement>
|
|
594
|
+
```
|
|
595
|
+
|
|
596
|
+
Users can then add to their pom.xml:
|
|
597
|
+
```xml
|
|
598
|
+
<repositories>
|
|
599
|
+
<repository>
|
|
600
|
+
<id>github</id>
|
|
601
|
+
<url>https://maven.pkg.github.com/your-org/*</url>
|
|
602
|
+
</repository>
|
|
603
|
+
</repositories>
|
|
604
|
+
```
|
|
605
|
+
|
|
606
|
+
<!-- JAVA:END -->
|
|
607
|
+
|