GuicedEE Creator
Create a new module with GuicedEE baseline constraints and validate them deterministically.
Required Flow
- Collect inputs:
groupId,artifactId,moduleName, and base package. - Create Maven project structure with
src/main/javaandsrc/test/java. - Apply the baseline POM constraints from
references/guicedee-baseline.md:- Maven wrapper pinned to Maven 4
- Java release/source/target at 25 or higher
- GuicedEE BOM import in
dependencyManagement - Testing stack includes
org.junit.jupiter:junit-jupiter(testscope), JUnit Jupiter6.0.3+, and Mockito
- Create
module-info.javafor both main and test roots with explicitrequires/opensdirectives:- Test module must
requiresJUnit Jupiter module(s) for thejunit-jupiterdependency - Every test package must be opened to
org.junit.platform.commons - Any package requiring injection must open to
com.google.guice - Any DTO/JSON deserialization package must open to
com.fasterxml.jackson.databind - Any package using Vert.x features must open to
com.guicedee.vertx - Safe default: open each used package to all required runtime targets
- Test module must
- Ensure package separation:
- Test module defaults to
<moduleName>.test - Test package names end in
.test - No package is shared between main and test source sets
- Test module defaults to
- Create a bootstrap main class with:
LogUtils.addHighlightedConsoleLogger(Level.DEBUG)IGuiceContext.registerModule("<moduleName>")IGuiceContext.instance().inject()
- If lifecycle/injection sequence customization is needed, implement lifecycle SPI classes:
com.guicedee.client.services.lifecycle.IGuicePreStartupcom.guicedee.client.services.lifecycle.IGuiceModulecom.guicedee.client.services.lifecycle.IGuicePostStartup- All lifecycle hooks extend
IDefaultService<J>(CRTP); overridesortOrder()to control execution order andenabled()to conditionally skip
- Register every SPI implementation in both:
src/main/java/module-info.java(provides ... with ...)src/main/resources/META-INF/services/<spi-interface-fqcn>
- Run
scripts/verify_guicedee_baseline.pybefore finishing.
Non-Negotiable Constraints
- Maven 4 is required (enforce via wrapper + enforcer rule).
- JDK 25 minimum is required.
- BOM import must exist exactly as:
<groupId>com.guicedee</groupId><artifactId>guicedee-bom</artifactId><type>pom</type><scope>import</scope>
module-info.javamust exist in both:src/main/java/module-info.javasrc/test/java/module-info.java
pom.xmlmust include:<groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><scope>test</scope>
- Test module must declare
requiresfor JUnit Jupiter (for examplerequires org.junit.jupiter.api;). - Every test package must include an
opens <package> to org.junit.platform.commons;directive. - Injection packages must
openstocom.google.guice. - DTO/JSON deserialization packages must
openstocom.fasterxml.jackson.databind. - Vert.x packages must
openstocom.guicedee.vertx. - Safe default for main module packages: open used packages to all required targets (
com.google.guice,com.fasterxml.jackson.databind,com.guicedee.vertx). - Safe default for test module packages: also include
org.junit.platform.commons. - A bootstrap
main()class must exist insrc/main/javaand register the current module name. - Lifecycle SPI implementations must be registered in both
module-info.javaandMETA-INF/services. - Lifecycle SPI implementations must override
sortOrder()(fromIDefaultService<J>). - Testing baseline must include JUnit Jupiter
6.0.3+and Mockito. - Playwright is optional and should be added for browser/E2E automation use cases.
- Package names cannot be duplicated between main and test modules.
- Test packages must use
.testsuffix.
Validation Command
python3 scripts/verify_guicedee_baseline.py --project-root .
References
references/guicedee-baseline.md- baseline snippets forpom.xml, wrapper, and module templates.