IKE Maven Plugin

The ike-maven-plugin provides the ike:* goal prefix — single-repo release orchestration, the release cascade, site deploy + publishing, scaffolding, native packaging utilities, and BOM generation. The AsciiDoc doc-rendering pipeline moved to ike-doc-maven-plugin (idoc:) in IKE-Network/ike-issues#437.

Coordinate Value
Group ID network.ike.tooling
Artifact ID ike-maven-plugin
Goal prefix ike:
Packaging maven-plugin
Java version 25

For workspace-spanning goals (ws:* prefix), see the ws plugin[1] in ike-platform. The two plugins are deliberately separate — ike:* is single-repo, ws:* fans out across a workspace’s checked-out subprojects.

Plugin shape

This is a regular Maven plugin — no <extensions>true</extensions>, no custom <packaging> type registered via META-INF/plexus/components.xml, no participation in the build extension realm. Goals look up at execution time, the plugin’s <version> interpolates from ${ike-tooling.version} like any other managed plugin, and consumers inherit the version through ordinary <pluginManagement> indirection.

This was not always the case. Earlier revisions registered the <packaging>ike-doc</packaging> custom type here (the stale components.xml removed per IKE-Network/ike-issues#320), which forced this plugin to be loaded as a build extension and consequently forced its <version> to be a literal string everywhere it was declared. That constraint was retired alongside the migration to a classifier-canonical doc shape — see the ike-tooling reactor home for the full design rationale, or IKE-Network/ike-issues#321 for the umbrella tracking issue.

What this means for plugin consumers: nothing changes about how you invoke ike:* goals. What changed is that the plugin no longer forces literal-version pins in your POM, and no longer contributes <packaging>ike-doc</packaging> to your reactor. Doc modules use <packaging>pom</packaging> (or <packaging>jar</packaging> for hybrids) plus an adoc classifier attachment; the activation is path-conditional on src/docs/asciidoc/ existence in ike-parent’s `doc-pipeline profile.

Goal naming convention

Most state-mutating goals come in a draft / publish pair:

mvn ike:release-draft        # report what would happen, write nothing
mvn ike:release-publish      # apply the changes

The bare goal name (e.g. ike:release) is wired to the draft variant. This is the same convention used by ws:* — every mutation is two-phase with a real chance to audit the draft before committing.

Read-only goals (e.g. ike:help, ike:env) have no draft/publish split — they are always safe.

Quick start — IntelliJ IDEA

Open the project in IntelliJ. The Maven tool window (right sidebar, View → Tool Windows → Maven if hidden) auto-discovers the ike:* goals from this plugin’s <pluginManagement> declaration in ike-parent. Both ike and ws (the workspace plugin) appear as top-level entries:

Maven tool window with ike + ws plugins

Expand the ike (network.ike.tooling:ike-maven-plugin:…​) entry to see all ike:* goals:

ike goals expanded in Maven tool window

Common interactions:

  • Run a read-only goal (ike:help, ike:env) — double-click the goal in the tree.
  • Run a goal with parameters (e.g. ike:site-publish with -Dsite=removed to uninstall) — right-click the goal → Modify Run Configuration… → fill PropertiesRun.
  • Pin frequently-used invocations — once a Run Configuration is saved, it appears in the toolbar dropdown for one-click access.
  • Discover goalsike:help prints the registry, but the Maven tool window has all goals visible by name without running anything.

For workspace-spanning operations, the same IntelliJ pattern applies to the ws:* plugin in ike-platform — see the ws plugin Quick Start[1].

Quick start — Command line

# Diagnose any in-flight or partial release (read-only)
mvn ike:release-status

# Preview a release (writes a markdown report; no on-disk changes)
mvn ike:release-draft

# Execute a release: tag, deploy to Nexus + komet.sh + gh-pages,
# bump to next SNAPSHOT
mvn ike:release-publish

# Re-deploy the site for the current release without re-releasing
mvn ike:site-publish

# Apply scaffold convention upgrades
mvn ike:scaffold-publish

Quick reference

Goal Phase Purpose
release-{draft,publish} release Single-repo release: tag, deploy to Nexus + komet.sh + GitHub Pages, bump
verify-release-published release Verify all post-release publication targets (6 read-only HTTP checks)
site-{draft,publish} site Generate, deploy, and register the Maven site; -Dsite=removed uninstalls and deregisters
ike:generate-bom bom Auto-generate a BOM POM from another module’s dependency management
scaffold-{draft,publish,revert} scaffold Apply the workspace scaffold manifest (gitignore, hooks, IDE settings)
ike:inject-breadcrumb site Inject nav breadcrumbs into JaCoCo HTML reports
ike:setup setup Install VCS bridge git hooks to ~/.git-hooks/
ike:unpack-zip utility Download + unpack a zip from a URL
ike:rename utility Rename a file (replaces exec-maven-plugin calls to mv)
ike:codesign-natives native Sign native libraries inside a jlink runtime image (macOS notarization)
ike:codesign-pkg native Re-sign .app inside .pkg to add JVM entitlements
ike:jpackage-props native Compute build timestamp, platform, JPackage version properties
ike:notarize native Sign + notarize macOS installer packages (.pkg, .dmg)
ike:help inspection Discover available ike:* goals

Release goals

ike:release-{draft,publish}

Full single-repo release in one command. The publish variant:

  1. Creates a release/<version> branch from current HEAD
  2. Sets the release version (strips -SNAPSHOT)
  3. Stamps project.build.outputTimestamp from the commit timestamp (reproducible builds)
  4. Runs mvn verify -B
  5. Tags v<version>
  6. Builds the site and deploys to scpexe internal site (/srv/ike-site/<projectId>/<version>/)
  7. Updates the latest symlink to point at the new version (ike-issues#303)
  8. Force-pushes the staged site to <repo>/gh-pages so it serves at https://ike.network/<projectId>/[2] via the org CNAME (ike-issues#312)
  9. clean deploy to Nexus (signed via Bouncy Castle)
  10. Pushes tag and main to origin
  11. Creates a GitHub Release (uses milestone-based notes if a matching <projectId> v<version> milestone exists)
  12. Cleans up the snapshot/main site
  13. Bumps to the next SNAPSHOT version

Failure recovery: re-run ike:release-publish and it picks up where the previous attempt left off (already-published phases are skipped).

If your reactor is the one that builds ike-maven-plugin (i.e., ike-tooling itself), see Self-host bootstrap pattern[3] for how the release flow’s site invocations sidestep the reactor cycle.

ike:verify-release-published

Verify that all six post-release publication targets are reachable for a given project + version. Read-only; exits non-zero on any check failure so it composes into shell pipelines and CI.

# Use pom defaults (artifactId + pom version with -SNAPSHOT stripped)
mvn ike:verify-release-published

# Explicit values (e.g., verifying from outside the released checkout)
mvn ike:verify-release-published -DprojectId=ike-tooling -Dversion=163

# Skip targets that aren't ready yet (e.g., immediately after tag push,
# before the org-site sync has had a chance to run)
mvn ike:verify-release-published -DskipOrgSite=true

Checks:

ike-issues#374.

mvn ike:release-draft                       # preview
mvn ike:release-publish                     # execute
mvn ike:release-publish -DskipVerify=true   # skip mvn verify (faster retry)

ike:release-cascade and ike:cascade-export

ike:release-publish releases one repo. The IKE foundationike-tooling → ike-docs → ike-platform — must release in order, because each consumes the artifacts of the ones above it. ike:release-cascade walks that order, releasing every foundation repo with unreleased changes; ike:cascade-export writes the cascade topology for a CI meta-runner. Both assemble the graph from each repo’s own src/main/cascade/release-cascade.yaml.

See The IKE Release Cascade[10] for the model, the manifest format, and how to test and run it.

Site goals

ike:site-{draft,publish}

Generate, deploy, and register the project’s Maven site in one converged goal (ike-issues#398). The publish variant builds the site, deploys it (version-prefixed directory + latest symlink + gh-pages push, matching what release-publish does for the site portion), and registers the project on the IKE-Network/IKE-Network.github.io org landing page (https://ike.network/[7]). Registration is part of the default flow — no separate goal.

Useful for re-deploying a site without re-releasing the artifact.

mvn ike:site-publish                              # deploy + register
mvn ike:site-publish -DupdateRegistration=false   # deploy only, skip org landing page
mvn ike:site-publish -DupdateSite=false           # registration only, no site deploy
mvn ike:site-publish -Dsite=removed               # uninstall: remove the deployed
                                                  # site directory and deregister

The -Dsite=removed form replaces both the old clean-site (stale snapshot/checkpoint cleanup) and deregister-site goals — uninstall includes stale-dir cleanup and org-index removal. Use ike:site-draft to preview any of these without writing.

BOM generation

ike:generate-bom

Generate a standalone BOM POM from another module’s <dependencyManagement>. The IKE BOM (network.ike.platform:ike-bom) is auto-generated this way from `ike-parent’s dependency management, ensuring the BOM never drifts from the parent’s version pins.

Scaffold goals

ike:scaffold-{draft,publish,revert}

Apply (or revert) the workspace scaffold — the conventional non-source files that every IKE workspace shares: .gitignore, git hooks under ~/.git-hooks/, .mvn/maven.config, IDE settings (.idea/, .vscode/). The scaffold manifest is shipped as the scaffold classifier of ike-build-standards.

scaffold-revert undoes a previous scaffold-publish per the tier policy in the manifest (some files are tool-owned and revertible, others are tracked in version control and not touched on revert).

Site and setup goals

The AsciiDoc doc-rendering pipeline (asciidoc, render-pdf, adocstudio, fix-svg, patch-docbook, prepare-renderer-output, copy-default-pdf, copy-docs, scan-logs) moved to ike-doc-maven-plugin (idoc:) — see the idoc plugin[11]. The two goals below stay in ike-maven-plugin: neither renders AsciiDoc.

ike:inject-breadcrumb

Inject navigation breadcrumbs and theme overrides into JaCoCo HTML reports so they fit visually with the rest of the Maven site.

ike:setup

Install the VCS bridge git hooks (pre-commit, post-commit, pre-push) to ~/.git-hooks/. Run once per developer machine after first clone.

Native packaging

These are macOS-specific signing / notarization goals used by Komet desktop builds.

ike:codesign-natives

Sign native libraries (.dylib, .jnilib) inside a jlink runtime image so the resulting installer passes Apple notarization.

ike:codesign-pkg

Re-sign the .app bundle inside a jpackage-produced .pkg installer to add macOS entitlements required by the JVM.

ike:jpackage-props

Compute ~19 Maven project properties (build timestamp, platform, JPackage version) consumed by JReleaser’s jpackage descriptor.

ike:notarize

Sign and notarize macOS installer packages (.pkg, .dmg). Automates the Apple notarization workflow.

Utility goals

ike:unpack-zip

Download and unpack a zip archive from a URL. Uses java.util.zip.ZipInputStream directly — bypasses unpack-dependencies when the source isn’t a Maven artifact.

ike:rename

Rename a file within a directory. Replaces exec-maven-plugin calls to mv in the doc pipeline.

ike:help

Print a list of available ike:* goals, generated from the compile-time IkeGoal registry. Goal names cannot drift from the actual plugin because the registry is enforced at compile time.

See also

Searching...
No results.