1:"$Sreact.fragment" 2:I[3361,["619","static/chunks/619-ba102abea3e3d0e4.js","558","static/chunks/app/layout-8ed3165a2efc4aed.js"],"default"] 3:I[8320,["619","static/chunks/619-ba102abea3e3d0e4.js","558","static/chunks/app/layout-8ed3165a2efc4aed.js"],"default"] 4:I[9766,[],""] 5:I[8924,[],""] 6:I[2619,["619","static/chunks/619-ba102abea3e3d0e4.js","426","static/chunks/app/guides/stemcode-java-developers/page-0aa623f29d826b1a.js"],""] 7:I[9526,["619","static/chunks/619-ba102abea3e3d0e4.js","558","static/chunks/app/layout-8ed3165a2efc4aed.js"],"default"] 8:I[1503,["619","static/chunks/619-ba102abea3e3d0e4.js","558","static/chunks/app/layout-8ed3165a2efc4aed.js"],"default"] 9:I[2067,["619","static/chunks/619-ba102abea3e3d0e4.js","558","static/chunks/app/layout-8ed3165a2efc4aed.js"],"default"] a:I[271,["619","static/chunks/619-ba102abea3e3d0e4.js","558","static/chunks/app/layout-8ed3165a2efc4aed.js"],"default"] 10:I[7150,[],""] :HL["/_next/static/css/a106fc8500d469f6.css","style"] b:T43b,{"@context":"https://schema.org","@type":"BlogPosting","headline":"StemCode for Java Developers: AI Coding with Spring Boot, Maven, Gradle, and JDTLS","description":"Learn how Java developers can use StemCode with Spring Boot, Maven, Gradle, JDTLS, JPA, tests, refactoring, repository analysis, and AI-assisted code review.","datePublished":"2026-09-21","dateModified":"2026-09-21","author":{"@type":"Organization","name":"GrowBitLabs","url":"https://growbitlabs.com"},"publisher":{"@type":"Organization","name":"GrowBitLabs","url":"https://growbitlabs.com"},"mainEntityOfPage":"https://growbitlabs.com/guides/stemcode-java-developers","url":"https://growbitlabs.com/guides/stemcode-java-developers","keywords":"StemCode Java, AI coding agent for Java, Spring Boot AI coding assistant, Maven AI coding, Gradle AI coding, JDTLS AI, Java code review AI, JPA code review, repository aware AI coding","about":{"@type":"SoftwareApplication","name":"StemCode","applicationCategory":"DeveloperApplication","operatingSystem":"Windows, macOS, Linux","url":"https://growbitlabs.com/stemcode"}}0:{"P":null,"b":"52mZGPOTbZG1yQUVMfwha","p":"","c":["","guides","stemcode-java-developers"],"i":false,"f":[[["",{"children":["guides",{"children":["stemcode-java-developers",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/a106fc8500d469f6.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L2",null,{"children":[["$","div",null,{"className":"scroll-progress","id":"scrollProgress"}],["$","$L3",null,{}],["$","main",null,{"id":"top","children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","section",null,{"className":"inner-hero","children":["$","div",null,{"className":"container","children":[["$","div",null,{"className":"inner-eyebrow reveal","children":[["$","span",null,{"children":"404"}],["$","i",null,{}],["$","span",null,{"children":"PAGE NOT FOUND"}]]}],["$","div",null,{"className":"inner-hero-copy reveal","children":[["$","h1",null,{"children":["This page took a wrong ",["$","em",null,{"children":"turn."}]]}],["$","p",null,{"children":"The address may have changed, or the page may no longer be available."}],["$","div",null,{"className":"inner-hero-actions","children":[["$","$L6",null,{"className":"btn primary","href":"/","children":"GO HOME"}],["$","$L6",null,{"className":"btn text","href":"/stemcode","children":"VIEW STEMCODE →"}]]}]]}]]}]}],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L7",null,{}],["$","footer",null,{"className":"site-footer","children":["$","div",null,{"className":"container footer-shell","children":[["$","div",null,{"className":"footer-brand-block","children":[["$","$L6",null,{"className":"brand brand-footer","href":"/","aria-label":"GrowBitLabs home","children":["$","img",null,{"className":"brand-logo","src":"/assets/logo.png","alt":"GrowBitLabs logo"}]}],["$","p",null,{"children":"Home of StemCode and GrowBit Convo. Local-first AI development, private AI infrastructure, and agent engineering."}]]}],["$","div",null,{"className":"footer-columns","children":[["$","nav",null,{"aria-label":"Solutions links","children":[["$","strong",null,{"children":"SOLUTIONS"}],["$","$L6",null,{"href":"/stemcode","children":"StemCode"}],["$","$L6",null,{"href":"/stemcode-survey","children":"StemCode Survey"}],["$","$L6",null,{"href":"/compare","children":"StemCode Comparisons"}],["$","$L6",null,{"href":"/growbit-convo","children":"GrowBit Convo"}],["$","$L6",null,{"href":"/open-models","children":"Open Models"}],["$","$L6",null,{"href":"/pricing","children":"Pricing"}],["$","$L6",null,{"href":"/enterprise","children":"Enterprise"}],["$","$L6",null,{"href":"/docs","children":"StemCode Docs"}],["$","$L6",null,{"href":"/guides","children":"Developer Guides"}]]}],["$","nav",null,{"aria-label":"Company links","children":[["$","strong",null,{"children":"COMPANY"}],["$","$L6",null,{"href":"/about","children":"About"}],["$","$L6",null,{"href":"/services","children":"Services"}],["$","$L6",null,{"href":"/contact","children":"Contact"}],["$","$L6",null,{"href":"/careers","children":"Careers"}],["$","$L6",null,{"href":"/press","children":"Press"}]]}],["$","nav",null,{"aria-label":"Legal links","children":[["$","strong",null,{"children":"LEGAL"}],["$","$L6",null,{"href":"/privacy","children":"Privacy Policy"}],["$","$L6",null,{"href":"/terms","children":"Terms of Service"}],["$","$L8",null,{}]]}],["$","nav",null,{"aria-label":"Social links","children":[["$","strong",null,{"children":"SOCIAL"}],["$","a",null,{"href":"https://www.linkedin.com/company/growbitlabs","target":"_blank","rel":"noopener noreferrer","children":"LinkedIn"}],["$","a",null,{"href":"https://www.facebook.com/growbitlabs/","target":"_blank","rel":"noopener noreferrer","children":"Facebook"}]]}]]}],["$","div",null,{"className":"footer-bottom","children":[["$","span",null,{"children":["(c) ",["$","span",null,{"id":"year"}]," GrowBitLabs"]}],["$","span",null,{"children":"StemCode + GrowBit Convo"}]]}]]}]}],["$","$L9",null,{}],["$","$La",null,{}]]}]}]}]]}],{"children":["guides",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["stemcode-java-developers",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"$b"}}],"$Lc","$Ld"],null,"$Le"]}],{},null,false]},null,false]},null,false]},null,false],"$Lf",false]],"m":"$undefined","G":["$10",[]],"s":false,"S":true} 1e:I[4431,[],"OutletBoundary"] 20:I[5278,[],"AsyncMetadataOutlet"] 22:I[4431,[],"ViewportBoundary"] 24:I[4431,[],"MetadataBoundary"] 25:"$Sreact.suspense" c:["$","section",null,{"className":"inner-hero docs-hero","children":["$","div",null,{"className":"container","children":[["$","div",null,{"className":"inner-eyebrow reveal","children":[["$","$L6",null,{"href":"/guides","children":"RESOURCES / GUIDES"}],["$","i",null,{}],["$","span",null,{"children":"JAVA"}]]}],["$","div",null,{"className":"inner-hero-copy reveal","children":[["$","h1",null,{"children":["StemCode for Java Developers: AI Coding with ",["$","em",null,{"children":"Spring Boot, Maven, and Gradle."}]]}],["$","p",null,{"children":"Learn how Java developers can use StemCode with Spring Boot, Maven, Gradle, JDTLS, JPA, tests, refactoring, repository analysis, and AI-assisted code review."}],["$","div",null,{"className":"inner-hero-actions docs-hero-actions","children":[["$","a",null,{"className":"btn primary","href":"#setup","children":"START SETUP"}],["$","$L6",null,{"className":"btn text","href":"/stemcode","children":"EXPLORE STEMCODE →"}]]}],["$","div",null,{"className":"docs-meta-strip","aria-label":"Guide metadata","children":[["$","span",null,{"children":["PUBLISHED ","2026-09-21"]}],["$","span",null,{"children":"STEMCODE DEVELOPER GUIDE"}],["$","span",null,{"children":"LOCAL-FIRST AI CODING"}]]}]]}]]}]}] d:["$","section",null,{"className":"docs-layout section","children":["$","div",null,{"className":"container docs-shell docs-shell-wide","children":[["$","aside",null,{"className":"docs-sidebar","aria-label":"Guide table of contents","children":[["$","span",null,{"className":"toc-label","children":"GUIDE"}],["$","$L6",null,{"href":"/guides","children":"All developer guides"}],["$","$L6",null,{"href":"/stemcode","children":"StemCode overview"}],["$","$L6",null,{"href":"/docs","children":"StemCode docs"}],["$","span",null,{"className":"toc-label","children":"ON THIS PAGE"}],["$","a",null,{"href":"#agents-md","children":"AGENTS.md project instructions"}],[["$","a","#why",{"href":"#why","children":"Why StemCode for Java"}],["$","a","#setup",{"href":"#setup","children":"Install and set up"}],["$","a","#jdtls",{"href":"#jdtls","children":"Java code intelligence"}],["$","a","#spring",{"href":"#spring","children":"Spring Boot workflow"}],["$","a","#maven-gradle",{"href":"#maven-gradle","children":"Maven and Gradle"}],["$","a","#debugging",{"href":"#debugging","children":"Debug failing tests"}],["$","a","#jpa",{"href":"#jpa","children":"JPA and Hibernate"}],["$","a","#refactoring",{"href":"#refactoring","children":"Large refactors"}],["$","a","#memory",{"href":"#memory","children":"Project memory"}],["$","a","#review",{"href":"#review","children":"Git and code review"}],["$","a","#faq",{"href":"#faq","children":"FAQ"}]]]}],["$","article",null,{"className":"docs-content","children":[["$","section",null,{"id":"agents-md","className":"docs-section reveal","children":[["$","span",null,{"children":"PROJECT INSTRUCTIONS / AGENTS.MD"}],["$","h2",null,{"children":"Give StemCode durable repository instructions before asking it to edit."}],["$","p",null,{"children":["Add an ",["$","code",null,{"children":"AGENTS.md"}]," file at the repository root for persistent project instructions. StemCode loads",["$","code",null,{"children":" AGENTS.md"}]," or ",["$","code",null,{"children":".agent/AGENTS.md"}]," from the workspace into the model context, so this is the right place for architecture boundaries, generated-file rules, coding conventions, validation expectations, and manual setup notes that should apply across sessions."]}],["$","div",null,{"className":"docs-note","children":[["$","b",null,{"children":"Keep AGENTS.md practical and repository-specific"}],["$","p",null,{"children":"Prefer concrete rules the agent can act on: where important source lives, what it must not edit, which patterns it should preserve, and which checks it should run after a change."}]]}],["$","pre",null,{"children":["$","code",null,{"children":"# Java Project Instructions\n\nThis is a Java project.\n\nImportant source and configuration:\n- pom.xml or build.gradle / build.gradle.kts\n- src/main/java/\n- src/test/java/\n- application configuration and migration files\n\nFollow these rules:\n- Follow the repository's existing package structure, framework patterns, and dependency-injection conventions.\n- Do not modify target/, build/, .gradle/, generated sources, or dependency caches.\n- Preserve transaction, validation, authorization, and persistence boundaries during Spring or Jakarta changes.\n- Reuse existing libraries before adding Maven or Gradle dependencies.\n- Keep public API and serialization compatibility in mind during refactors.\n- Run focused Maven or Gradle tests and compilation before broader validation."}]}],["$","p",null,{"children":"Commit the file with the project so the same instructions are reviewable and shared by everyone using StemCode in the repository."}]]}],[["$","section",null,{"id":"why","className":"docs-section reveal","children":[["$","span",null,{"children":"01 / WHY STEMCODE FOR JAVA"}],["$","h2",null,{"children":"Repository-wide AI matters in large Java codebases."}],["$","p",null,{"children":"Enterprise Java applications often spread one feature across controllers, DTOs, validation, services, interfaces, domain models, repositories, transactions, JPA entities, events, listeners, queues, and external integrations. Multi-module Maven and Gradle builds add another layer of navigation."}],"$L11","$L12"]}],"$L13","$L14","$L15","$L16","$L17","$L18","$L19","$L1a","$L1b","$L1c"],"$L1d"]}]]}]}] e:["$","$L1e",null,{"children":["$L1f",["$","$L20",null,{"promise":"$@21"}]]}] f:["$","$1","h",{"children":[null,[["$","$L22",null,{"children":"$L23"}],null],["$","$L24",null,{"children":["$","div",null,{"hidden":true,"children":["$","$25",null,{"fallback":null,"children":"$L26"}]}]}]]}] 11:["$","p",null,{"children":"StemCode works directly with that repository instead of treating one open file as the whole problem. It can search the codebase, use semantic language-server information, make tracked edits, run approved build commands, investigate failures, and review Git changes."}] 12:["$","div",null,{"className":"docs-callout docs-callout-strong","children":[["$","strong",null,{"children":"GOOD FIT FOR JAVA TEAMS"}],["$","p",null,{"children":"Spring Boot, Maven, Gradle, JUnit, Mockito, JPA, Hibernate, REST APIs, modular monoliths, microservices, IntelliJ-based workflows, and CI-backed pull-request review can all stay inside the same engineering process."}]]}] 13:["$","section",null,{"id":"setup","className":"docs-section reveal","children":[["$","span",null,{"children":"02 / SETUP"}],["$","h2",null,{"children":"Install StemCode from the root of your Java repository."}],["$","p",null,{"children":"Install the CLI with an npm-family package manager or one of the official shell installers. The packaged CLI is self-contained, so it does not require a .NET SDK."}],["$","div",null,{"className":"doc-command","children":[["$","b",null,{"children":"npm"}],["$","code",null,{"children":"npm install -g stemcode"}]]}],["$","p",null,{"children":"Start it next to your Maven or Gradle build files:"}],["$","pre",null,{"children":["$","code",null,{"children":["cd my-java-project","\n","stemcode"]}]}],["$","p",null,{"children":"Initialize repository-specific StemCode files:"}],["$","pre",null,{"children":["$","code",null,{"children":"/init"}]}],["$","p",null,{"children":"Use those workspace files for architecture notes, commands, test strategy, and conventions that should remain visible to the team."}]]}] 14:["$","section",null,{"id":"jdtls","className":"docs-section reveal","children":[["$","span",null,{"children":"03 / JAVA CODE INTELLIGENCE"}],["$","h2",null,{"children":"Use JDTLS for semantic Java navigation."}],["$","p",null,{"children":"StemCode includes built-in Java language-server support for JDTLS, the Eclipse JDT Language Server. Install JDTLS using the method appropriate for your operating system and make sure its launcher is available on PATH."}],["$","p",null,{"children":"Refresh server detection:"}],["$","pre",null,{"children":["$","code",null,{"children":"/lsp refresh"}]}],["$","p",null,{"children":"Inspect all detected servers:"}],["$","pre",null,{"children":["$","code",null,{"children":"/lsp"}]}],["$","p",null,{"children":"Or inspect a specific Java source file:"}],["$","pre",null,{"children":["$","code",null,{"children":"/lsp file src/main/java/com/example/orders/OrderService.java"}]}],["$","div",null,{"className":"docs-note","children":[["$","b",null,{"children":"Why JDTLS helps"}],["$","p",null,{"children":"Semantic definitions, references, implementations, diagnostics, and call relationships are especially useful in Java projects with deep interface hierarchies, generated configuration, and dependency injection."}]]}]]}] 15:["$","section",null,{"id":"spring","className":"docs-section reveal","children":[["$","span",null,{"children":"04 / SPRING BOOT"}],["$","h2",null,{"children":"Trace request flows before changing production code."}],["$","p",null,{"children":"A strong first task is to ask StemCode to map one real application workflow from the edge of the system to persistence and side effects."}],["$","div",null,{"className":"docs-feature-card","children":[["$","span",null,{"children":"EXAMPLE PROMPT"}],["$","h3",null,{"children":"Trace order creation."}],["$","p",null,{"children":"Trace POST /orders from the REST controller through validation, application services, domain logic, repositories, JPA persistence, transaction boundaries, emitted events, and external integrations."}]]}],["$","p",null,{"children":"Then ask targeted questions such as:"}],["$","pre",null,{"children":["$","code",null,{"children":"Find all implementations of PaymentGateway and explain where each implementation is selected."}]}],["$","pre",null,{"children":["$","code",null,{"children":"Find every place OrderStatus changes and summarize the allowed transitions."}]}],["$","p",null,{"children":"When you are ready to implement a feature, make repository discovery part of the task:"}],["$","pre",null,{"children":["$","code",null,{"children":"Add order cancellation support.\n\nBefore editing:\n- inspect similar endpoints\n- identify authorization rules\n- find the service and transaction boundary\n- inspect repository methods\n- find exception-handling conventions\n- identify relevant unit and integration tests\n\nThen implement the change, run the relevant tests, and review the diff."}]}]]}] 16:["$","section",null,{"id":"maven-gradle","className":"docs-section reveal","children":[["$","span",null,{"children":"05 / MAVEN AND GRADLE"}],["$","h2",null,{"children":"Use the build system your project already trusts."}],["$","p",null,{"children":"StemCode does not replace Maven or Gradle. It can invoke approved commands so the implementation is checked by the real compiler, test runner, plugins, and project configuration."}],["$","div",null,{"className":"docs-grid-2","children":[["$","div",null,{"className":"docs-feature-card","children":[["$","span",null,{"children":"MAVEN"}],["$","h3",null,{"children":"Target the relevant scope."}],["$","pre",null,{"children":["$","code",null,{"children":["mvn test","\n","mvn verify","\n","mvn -pl order-service test"]}]}]]}],["$","div",null,{"className":"docs-feature-card","children":[["$","span",null,{"children":"GRADLE"}],["$","h3",null,{"children":"Use the project wrapper."}],["$","pre",null,{"children":["$","code",null,{"children":["./gradlew test","\n","./gradlew check","\n","./gradlew :order-service:test"]}]}]]}]]}],["$","p",null,{"children":"For a large monorepo, ask the agent to validate the smallest affected module first and only expand to the full build when necessary."}],["$","h3",null,{"children":"Add a reusable Java validation command"}],["$","p",null,{"children":["Teams can save the usual dependency, compile, and test loop as a project command under ",["$","code",null,{"children":".stemcode/commands"}],". After this file is committed, developers can run it in StemCode as",["$","code",null,{"children":" /java-validate"}],"."]}],["$","pre",null,{"children":["$","code",null,{"children":"---\nname: java-validate\ndescription: Run Maven or Gradle validation for a Java project\nargs: [\"buildTool\", \"scope\"]\n---\n\nValidate the Java workspace using the repository build tool.\n\nIf buildTool is maven, run:\n\n1. mvn -q -DskipTests package\n2. mvn test $scope\n\nIf buildTool is gradle, run:\n\n1. ./gradlew assemble\n2. ./gradlew test $scope\n\nIf a command fails, stop, summarize the failure, identify the most\nrelevant module or source set, and explain the next fix before editing."}]}],["$","h3",null,{"children":"Important allow-list checks"}],["$","p",null,{"children":"Maven and Gradle may write build outputs and dependency caches, so keep shell permissions explicit before a validation-heavy session:"}],["$","pre",null,{"children":["$","code",null,{"children":"/permissions\n/rules\n/allow shell \"mvn *\"\n/allow shell \"./gradlew *\"\n/allow shell \"gradle *\""}]}],["$","p",null,{"children":"The important tool categories are repository file read/search, Java language-server inspection, shell execution for Maven or Gradle, and file writes only when you ask StemCode to implement a fix."}]]}] 17:["$","section",null,{"id":"debugging","className":"docs-section reveal","children":[["$","span",null,{"children":"06 / TEST DEBUGGING"}],["$","h2",null,{"children":"Investigate the root cause instead of patching the assertion."}],["$","p",null,{"children":"Java test failures can involve application context setup, dependency injection, mocks, database fixtures, transactions, concurrency, or environment configuration. Repository context helps distinguish those causes."}],["$","pre",null,{"children":["$","code",null,{"children":"Run the failing test and explain the root cause. Do not change code until you have traced the failure through production code."}]}],["$","pre",null,{"children":["$","code",null,{"children":"Determine whether this Spring integration-test failure comes from application code, context configuration, database state, or test setup."}]}],["$","p",null,{"children":"For Mockito-heavy tests, you can explicitly ask StemCode to separate incorrect production behavior from over-specified mocking."}]]}] 18:["$","section",null,{"id":"jpa","className":"docs-section reveal","children":[["$","span",null,{"children":"07 / JPA AND HIBERNATE"}],["$","h2",null,{"children":"Review persistence behavior across the whole feature."}],["$","p",null,{"children":"Hibernate performance and correctness issues often appear far away from the repository method that triggered them. Serialization, lazy loading, entity relationships, transactions, and service boundaries all matter."}],["$","div",null,{"className":"docs-grid-2","children":[["$","div",null,{"className":"docs-feature-card","children":[["$","span",null,{"children":"PERFORMANCE"}],["$","h3",null,{"children":"Inspect query behavior."}],["$","p",null,{"children":"Review this feature for N+1 queries, excessive entity loading, lazy-loading surprises, unnecessary joins, and places where DTO projections would be safer or cheaper."}]]}],["$","div",null,{"className":"docs-feature-card","children":[["$","span",null,{"children":"TRANSACTIONS"}],["$","h3",null,{"children":"Check boundary assumptions."}],["$","p",null,{"children":"Trace @Transactional usage through this workflow and identify calls that may execute outside the intended transaction or through self-invocation."}]]}]]}]]}] 19:["$","section",null,{"id":"refactoring","className":"docs-section reveal","children":[["$","span",null,{"children":"08 / REFACTORING"}],["$","h2",null,{"children":"Use planning mode for high-impact interface changes."}],["$","p",null,{"children":"Large Java refactors are safer when the agent first maps callers, implementations, modules, and test coverage."}],["$","pre",null,{"children":["$","code",null,{"children":"Find every implementation and caller of PaymentProcessor. Explain what would be affected by splitting authorization and capture into separate abstractions."}]}],["$","p",null,{"children":"Switch to a planning profile:"}],["$","pre",null,{"children":["$","code",null,{"children":"/profile plan"}]}],["$","p",null,{"children":"Then ask for a migration sequence:"}],["$","pre",null,{"children":["$","code",null,{"children":"Create a staged refactoring plan that keeps the application buildable between steps. Do not modify anything yet."}]}],["$","p",null,{"children":"After reviewing the plan, implement incrementally and validate each module with Maven or Gradle."}]]}] 1a:["$","section",null,{"id":"memory","className":"docs-section reveal","children":[["$","span",null,{"children":"09 / PROJECT MEMORY"}],["$","h2",null,{"children":"Store Spring and Java conventions with the repository."}],["$","p",null,{"children":"Team memory can make repeated AI tasks more consistent by recording architectural expectations that would otherwise need to be restated in every prompt."}],["$","h3",null,{"children":"Example architecture notes"}],["$","pre",null,{"children":["$","code",null,{"children":"Controllers handle HTTP concerns only.\nBusiness logic belongs in application services.\nPublic service methods define transaction boundaries.\nREST controllers do not return JPA entities directly.\nInfrastructure adapters implement domain-facing interfaces."}]}],["$","h3",null,{"children":"Example test strategy"}],["$","pre",null,{"children":["$","code",null,{"children":"Fast tests: ./gradlew test\nIntegration tests: ./gradlew integrationTest\nDatabase integration tests require Docker."}]}]]}] 1b:["$","section",null,{"id":"review","className":"docs-section reveal","children":[["$","span",null,{"children":"10 / GIT AND CODE REVIEW"}],["$","h2",null,{"children":"Add a Java-specific review pass before the pull request."}],["$","pre",null,{"children":["$","code",null,{"children":"Review the current Git diff as a senior Java reviewer.\n\nFocus on:\n- correctness and null handling\n- concurrency and thread safety\n- Spring dependency injection\n- transaction boundaries\n- JPA and Hibernate performance\n- API compatibility\n- authorization and security\n- missing tests"}]}],["$","p",null,{"children":"Or pipe the diff into StemCode directly:"}],["$","pre",null,{"children":["$","code",null,{"children":"git diff | stemcode --stdin --profile review"}]}],["$","div",null,{"className":"docs-callout","children":[["$","strong",null,{"children":"THE PRACTICAL LOOP"}],["$","p",null,{"children":"Explore → understand → plan → implement → test → debug → review. StemCode contributes repository context and automation while Maven, Gradle, tests, Git, and human review remain the verification layers."}]]}]]}] 1c:["$","section",null,{"id":"faq","className":"docs-section reveal","children":[["$","span",null,{"children":"11 / FAQ"}],["$","h2",null,{"children":"StemCode for Java developers: common questions."}],["$","h3",null,{"children":"Does StemCode work with Spring Boot?"}],["$","p",null,{"children":"Yes. StemCode operates against the repository, so it can analyze and modify Spring Boot projects while using the project's normal build, test, and configuration files."}],["$","h3",null,{"children":"Can StemCode run Maven?"}],["$","p",null,{"children":"Yes. It can run approved commands such as mvn test, mvn verify, or module-specific Maven commands."}],["$","h3",null,{"children":"Can StemCode run Gradle?"}],["$","p",null,{"children":"Yes. It can invoke the repository's Gradle wrapper, including targeted module tasks and broader validation commands."}],["$","h3",null,{"children":"Can StemCode understand Java symbols?"}],["$","p",null,{"children":"With JDTLS installed and detected, StemCode can use LSP-powered semantic information such as definitions, references, implementations, and diagnostics."}],["$","h3",null,{"children":"Is StemCode useful for multi-module repositories?"}],["$","p",null,{"children":"Yes. Repository-wide search, semantic navigation, planning, and targeted module validation are particularly useful when a feature crosses several Java modules."}]]}] 1d:["$","section",null,{"className":"docs-section reveal","children":[["$","span",null,{"children":"NEXT STEP"}],["$","h2",null,{"children":"Put StemCode to work in a real repository."}],["$","p",null,{"children":"Install StemCode, open the project you already work in, and begin with a repository-understanding task before asking the agent to change code. That gives the model better context and keeps the workflow reviewable."}],["$","div",null,{"className":"docs-grid-2 docs-spaced","children":[["$","div",null,{"className":"docs-feature-card","children":[["$","span",null,{"children":"INSTALL"}],["$","h3",null,{"children":"Start with the CLI."}],["$","pre",null,{"children":["$","code",null,{"children":["npm install -g stemcode","\n","cd your-project","\n","stemcode"]}]}]]}],["$","div",null,{"className":"docs-feature-card","children":[["$","span",null,{"children":"LEARN"}],["$","h3",null,{"children":"Go deeper."}],["$","p",null,{"children":"Read the full StemCode documentation for providers, permissions, LSP integrations, memory, MCP, CI review, and advanced workspace configuration."}],["$","$L6",null,{"className":"inline-arrow","href":"/docs","children":"READ THE DOCS →"}]]}]]}]]}] 23:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","2",{"name":"theme-color","content":"#f4f5f0"}]] 1f:null 27:I[622,[],"IconMark"] 21:{"metadata":[["$","title","0",{"children":"StemCode for Java Developers: AI Coding with Spring Boot, Maven, Gradle, and JDTLS | GrowBitLabs"}],["$","meta","1",{"name":"description","content":"Learn how Java developers can use StemCode with Spring Boot, Maven, Gradle, JDTLS, JPA, tests, refactoring, repository analysis, and AI-assisted code review."}],["$","meta","2",{"name":"keywords","content":"StemCode Java,AI coding agent for Java,Spring Boot AI coding assistant,Maven AI coding,Gradle AI coding,JDTLS AI,Java code review AI,JPA code review,repository aware AI coding"}],["$","meta","3",{"name":"robots","content":"index, follow"}],["$","meta","4",{"name":"googlebot","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://growbitlabs.com/guides/stemcode-java-developers"}],["$","meta","6",{"property":"og:title","content":"StemCode for Java Developers: AI Coding with Spring Boot, Maven, Gradle, and JDTLS"}],["$","meta","7",{"property":"og:description","content":"Learn how Java developers can use StemCode with Spring Boot, Maven, Gradle, JDTLS, JPA, tests, refactoring, repository analysis, and AI-assisted code review."}],["$","meta","8",{"property":"og:url","content":"https://growbitlabs.com/guides/stemcode-java-developers"}],["$","meta","9",{"property":"og:type","content":"article"}],["$","meta","10",{"property":"article:published_time","content":"2026-09-21"}],["$","meta","11",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","12",{"name":"twitter:title","content":"StemCode for Java Developers: AI Coding with Spring Boot, Maven, Gradle, and JDTLS"}],["$","meta","13",{"name":"twitter:description","content":"Learn how Java developers can use StemCode with Spring Boot, Maven, Gradle, JDTLS, JPA, tests, refactoring, repository analysis, and AI-assisted code review."}],["$","link","14",{"rel":"icon","href":"/assets/fav.png","sizes":"196x186","type":"image/png"}],["$","link","15",{"rel":"apple-touch-icon","href":"/assets/fav.png","sizes":"196x186","type":"image/png"}],["$","$L27","16",{}]],"error":null,"digest":"$undefined"} 26:"$21:metadata"