Releases are published to Maven Central from GitHub Releases.
- Set a non-SNAPSHOT version in the parent POM and the three module POM
<parent>entries (for example0.1.0). - Push a matching tag such as
v0.1.0and publish a non-prerelease GitHub Release for it. .github/workflows/release.ymlvalidates the tag, runs the CI build, then deploys one signed Central bundle with all three modules (mvn -P release deploy).
The repository needs the MAVEN_CENTRAL_USERNAME, MAVEN_CENTRAL_PASSWORD,
GPG_PRIVATE_KEY and GPG_PASSPHRASE secrets for the verified
io.github.ghosthack Central namespace.
Builds use the Maven Wrapper (./mvnw), which pins Maven 3.9.16. Do not
switch the release to the runner's mvn: under Maven 3.10 the
central-publishing plugin (0.11.0) stages resolver files such as
_remote.repositories and maven-metadata-local.xml into the bundle, and
Central rejects it with "Bundle has content that does NOT have a .pom file".
To check a release build locally without signing:
./mvnw -P release -Dgpg.skip=true verifyTo inspect the signed bundle CI would upload, run the Release workflow
manually (optionally with a throwaway version). It builds against an
unreachable Central URL with placeholder credentials and attaches
central-bundle.zip as a workflow artifact; nothing is published.