Maven Central Publish requirements — check your pom in browser

Lint pom.xml against Maven Central Portal release rules: retired OSSRH endpoints, missing POM metadata, SNAPSHOT deps, signing and jar requirements. Runs entirely in your browser — nothing is uploaded.

Same engine as the VS Code extension, byte for byte.

Install free

Free for the file open in your editor - no key, no limit. The workspace sweep and the report ask for a key.

VS Code MarketplaceOpen VSX (Cursor, VSCodium)npmDocker Hub
ext install ReadyStack.maven-central-publish-gate
npx @readystack/maven-central-publish-gate <file>
docker run --rm -v "$PWD:/w" getreadystack/maven-central-publish-gate /w

Team? One key for every ReadyStack linter, 5 seats, $149 once

Get the full rule table as a PDF
All 16 rules Maven Central Publish Gate checks, each with its source and date, on printable pages you can hand to your team or auditor. We email it now, and once more only if a rule changes. No newsletter.

Get the full version $29

Gate every pom.xml in a multi-module repository in one command and keep the result as a REPORT.md you own and can attach to the release

One payment, one licence key for this tool. The key is shown right after payment.

A freelance Java release engineer bills about $80 an hour, and a rejected bundle costs a full release round-trip: retag, rebuild, re-sign, re-upload.

Buy the full version — $29
ENDEJAESPT

Find a tool

· ReadyStack

Worked example

Real numbers from this tool, line by line.

Maven Central Publish Gate

Sixteen blocking findings in one 78-line pom.xml. That is what the gate returned on a Java library whose maintainer, a solo open-source developer in Rotterdam, had already tagged, built and signed, ten minutes before mvn deploy.

None of the sixteen were compile errors. mvn verify was green. That is the whole trap: the Maven Central Portal validates publishing metadata that the build itself never reads, so a POM can be perfectly buildable and still be rejected at upload.

The biggest one was infrastructure. Sonatype closed oss.sonatype.org to releases on 2025-06-30. The POM still pointed distributionManagement there, and still drove the release with nexus-staging-maven-plugin, the plugin that retired alongside it. Two lines, written when that was the correct answer, and correct nowhere since.

This is exactly the kind of line a generated build file gets wrong. Ask an assistant to set up Central publishing and much of what comes back is the OSSRH staging flow, because that is what most of the internet still describes. The code compiles. The release does not land.

The rest were ordinary and just as fatal. The version was 2.4.0-SNAPSHOT, and Central does not accept SNAPSHOT bundles. One dependency was itself a SNAPSHOT, which would have made the published artifact unbuildable downstream even if the upload had landed. gpg.skip was true from a CI experiment, so nothing would have carried an .asc signature. A vendor jar was wired in with system scope and a local systemPath, pointing at a file that exists on exactly one laptop. An internal mirror was declared over plain http://, blocked by Maven itself since 3.8.1.

And four required metadata blocks were simply absent: description, licenses, developers, scm. The Portal requires all of them. There was no maven-source-plugin and no maven-javadoc-plugin, so no -sources.jar and no -javadoc.jar would have been attached, and Central requires both.

Fifteen errors and one warning, raised by 13 of the gate's 16 rules, on 78 lines.

Run the same gate against a release-ready POM and it returns nothing. The clean fixture that ships with the extension is 99 lines and produces 0 findings. Both files ship, so you can check the claim yourself before you trust it with a release.

The shutdown date is a real input, not a constant in a sentence. Hand the gate a date before 2025-06-30 and the OSSRH finding reads 'Sonatype closes it to releases on 2025-06-30 — move the deploy before that date.' Hand it today's date and it reads 'closed on 2025-06-30. Deploy to the Central Portal instead.' Same rule, same file, different answer.

What it does not do: it reads the POM as text. It does not resolve parent POMs, interpolate properties, contact the Portal, or read your settings.xml or keyring. A file that passes can still fail on something only Sonatype knows, such as an unverified namespace.

A rejected bundle is not a five-minute fix. You retag, rebuild, re-sign, re-upload. A freelance Java release engineer bills about $80 an hour, and the round-trip eats more than the review would have. Worse, a version number you burned on a failed attempt is gone for good.

The free version checks the pom.xml you have open, every rule, no key and no cap. That is a finished job — you see the blockers, you fix them, you ship. The licensed version changes the scope: it gates every pom.xml in a multi-module repository in one pass and writes the result to a REPORT.md you keep.

15 seconds — what it actually does

Questions people ask

What does Maven Central Publish Gate actually do?

It reads a pom.xml and reports every line that the Maven Central Portal will reject at upload: the retired oss.sonatype.org endpoint, nexus-staging-maven-plugin, SNAPSHOT versions and SNAPSHOT dependencies, missing name, description, url, licenses, developers or scm blocks, missing gpg, sources and javadoc plugins, plain http repositories, and system-scoped dependencies. Sixteen rules, each with the fix on the same line.

Who is this for?

Java and Kotlin library maintainers who publish to Maven Central from their own build rather than through a release platform. That means one-person open source projects, small platform teams shipping an internal SDK to Central, and anyone who inherited a pom.xml written when oss.sonatype.org still accepted releases and has not cut a release since.

Why will a free tool not do this?

mvn verify passes on a pom that Central rejects, because the Portal validates metadata that Maven itself never needs. A chatbot answers from training data that still describes the OSSRH staging flow Sonatype closed on 2025-06-30. The Portal itself only tells you after you upload, and only about the first thing it hits.

What is free and what does the licence key add?

Free is complete for one file: open a pom.xml, get every blocker on it, fix them, ship. The licence key changes scope and ownership. It gates every pom.xml in a multi-module repository in one command, and writes the result to a REPORT.md file you keep and can attach to the release or a compliance record.

What would this cost me otherwise?

A freelance Java release engineer bills about $80 an hour. The real cost is not the review though, it is the round-trip: a rejected bundle means you retag, rebuild, re-sign and re-upload, and any version number you already burned on a failed release is gone from that repository forever.

Why not just ask ChatGPT or another AI chat?

A general AI chat answers from training data with a cutoff date, cannot read your repository and names no rule version. Maven Central Lint - pom.xml publish requirements (sources, checks the file you open against 16 rules from a rule set dated 2026-09-20, and points at the exact line. For a filing, an audit or a client you need that dated result on your own files.

Ask about this tool

One question, answered by the person who built it. Your email only if you want the answer sent.

Embed this tool on your site (free)

Paste this code into your page. It runs in your visitor’s browser and stays up to date. Nothing your visitors type is stored.

 All embeddable tools

For businesses: your name and logo instead of ours, and each visitor’s result + e-mail in your inbox (only when they tick consent) — Pro from $19/month. See Pro →