Skip to content

Repository files navigation

HauntedPlatform

HauntedPlatform is the Java build and dependency-management standard for HauntedMC software. It contains no Minecraft runtime or gameplay code.

Artifact Intended use
haunted-parent Java 25, plugin policy, Enforcer, Checkstyle, generic JaCoCo, flattening, and deployment policy.
haunted-library-parent Parent for reusable libraries; imports only haunted-dependencies-bom.
haunted-application-parent Parent for deployable HauntedMC applications; imports haunted-platform-bom.
haunted-dependencies-bom Shared platform-neutral third-party versions, including OpenTelemetry, Hibernate, and other dependencies shared across projects.
haunted-platform-bom Validated public HauntedMC foundation-library versions, including all regular DataProvider/DataRegistry/Theme modules and FeatureFramework's own BOM.
haunted-build-rules Packaged Checkstyle configuration consumed by the shared parent.

FeatureFramework, DataProvider, DataRegistry, and Theme use haunted-library-parent. ServerFeatures and ProxyFeatures use haunted-application-parent. Runtime targets, shading, acceptance tests, project metadata, release locations, and coverage thresholds remain in their owning repositories.

Maven consumption

HauntedPlatform is published only to GitHub Packages. GitHub requires authentication for Maven package downloads, including public packages. Supply a classic personal access token with read:packages (and repository access where required) through environment variables; never commit a token.

<settings>
  <servers>
    <server>
      <id>github</id>
      <username>${env.PACKAGES_USER}</username>
      <password>${env.PACKAGES_TOKEN}</password>
    </server>
  </servers>
  <profiles><profile><id>hauntedmc</id><repositories>
    <repository><id>central</id><url>https://repo.maven.apache.org/maven2</url></repository>
    <repository><id>github</id><url>https://maven.pkg.github.com/hauntedmc/*</url></repository>
  </repositories>
  <pluginRepositories><pluginRepository><id>github</id><url>https://maven.pkg.github.com/hauntedmc/*</url></pluginRepository></pluginRepositories>
  </profile></profiles>
  <activeProfiles><activeProfile>hauntedmc</activeProfile></activeProfiles>
</settings>

Each HauntedMC repository commits an equivalent .mvn/settings.xml and .mvn/maven.config so parent resolution happens before Maven reads the project POM, and so packaged Maven-plugin dependencies such as the shared Checkstyle rules resolve from GitHub Packages. CI supplies PACKAGES_USER and PACKAGES_TOKEN from GitHub Actions secrets.

Parent selection and version ownership

Reusable libraries inherit the library parent and must not import the ecosystem BOM:

<parent>
  <groupId>nl.hauntedmc.platform</groupId>
  <artifactId>haunted-library-parent</artifactId>
  <version>1.3.0</version>
  <relativePath/>
</parent>

Deployable HauntedMC applications inherit the application parent. It imports the ecosystem BOM and the direct Maven-precedence constraints required for the FeatureFramework compatibility graph:

<parent>
  <groupId>nl.hauntedmc.platform</groupId>
  <artifactId>haunted-application-parent</artifactId>
  <version>1.3.0</version>
  <relativePath/>
</parent>

Use haunted-dependencies-bom directly only for a build that intentionally does not inherit a HauntedPlatform parent. Libraries keep their own public compatibility versions where necessary; applications may retain local aliases such as ${featureframework.version} only when they forward a ${haunted.*} Platform property. Do not re-import FeatureFramework, Adventure, OpenTelemetry, or common third-party BOMs in an application that already inherits haunted-application-parent.

OpenTelemetry core artifacts are aligned through io.opentelemetry:opentelemetry-bom at ${haunted.opentelemetry.version}. The unified JVM runtime telemetry library is managed separately through ${haunted.opentelemetry.runtime-telemetry.version} because that artifact is currently published from the instrumentation alpha line. Keep that alpha implementation behind runtime/integration boundaries; do not expose its types from stable HauntedMC public APIs.

Publishing and verification

The release workflow publishes the complete reactor to HauntedMC/HauntedPlatform using HAUNTEDMC_PACKAGES_USERNAME and HAUNTEDMC_PACKAGES_TOKEN. No Maven Central, signing, or Central Portal credentials are used.

verification contains external consumer fixtures for the third-party BOM, library parent, and application parent. The fixtures verify the OpenTelemetry SDK/exporter/runtime-telemetry dependency foundation as well as the existing FeatureFramework, DataProvider, DataRegistry, Theme, Adventure, Gson, SLF4J, and Paper/Velocity compatibility paths. They use <relativePath/>; the release workflow runs them after publication with a fresh Maven repository, preventing reactor or local-cache resolution from masking publication defects.

The application parent contains direct Adventure and common-library constraints in addition to importing haunted-platform-bom. This is deliberate Maven precedence handling: an imported BOM cannot override conflicting management inherited through FeatureFramework. Consumers must not repeat those pins.

Release policy

HauntedPlatform releases are immutable Git tags and GitHub Packages versions. Consumers use released parent artifact versions and immutable reusable-workflow tags such as @v1.3.0, never @main. A platform BOM release names only already published public foundation artifacts; public-library releases are aligned by a later Platform release.

For the maintained release procedure and the guarded version-update command, see docs/releasing.md. See CHANGELOG.md for upgrade notes.

About

HauntedMC Java build and dependency-management platform

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages