MPS Distribution Build — Ant Pipeline & Plugin Bundling
SkillMonitoring & opsUse when bundling a new plain Java/Kotlin plugin into MPS distribution archives, debugging packaging/layout issues in `build/mps*.xml`, tracing where per-plugin artefacts end up, or editing `plugins/mps-build/solutions/mpsBuild/models/build.mps` (the source of truth that generates every `build/mps*.xml`). The skill covers the generated Ant pipeline, plugin-to-distribution wiring, and the per-plugin / aggregator / distribution layers.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the MPS Distribution Build — Ant Pipeline & Plugin Bundling skill
What this skill tells your AI
The instructions your AI receives, as published by jetbrains/mps in .agents/skills/mps-distribution-build/SKILL.md and read by ahel’s review.
This skill explains how the generated Ant scripts under build/mps*.xml assemble MPS distribution archives, and how to add a new plain Java/Kotlin plugin module (e.g. plugins/mcp-tools) so it ends up in the produced archives. Authoring the model that generates these Ant scripts is covered separately by mps-build-language — this skill focuses on the output side and the plugin-bundling touchpoints.
Critical Directives
- The Ant files are generated. All
build/mps*.xmlfiles carry<!-- Generated by MPS -->. Do not hand-edit them as a permanent solution — author the change inplugins/mps-build/solutions/mpsBuild/models/build.mpsand regenerate. - A new per-plugin
BuildProjectis invisible to the distribution until it is also wired into thempsaggregator BuildProject andmpsDistribution. A plugin can build intobuild/artifacts/<projectName>/but never enter the final zip ifmps.xmlis not updated. - IDEA platform jars under
<MPS>/lib/and<MPS>/plugins/<idea-plugin>/lib/are fetched bybuild.xml platform(Ivy viagetDependencies.xml). They do not exist on a clean checkout, and noBuildProjectdeclares the fetch. Every per-plugin script implicitly requiresant -f build/build.xml platformto have already run. - There is no
${idea.plugins.dir}macro — do not invent one. Reference fetched IDEA-plugin jars via${basedir}/plugins/<idea-plugin>/lib/(matches the IDEA project libraries under.idea/libraries/*.xml). - The
test/source root is not part of the production jar. Test compilation belongs in a sibling test-onlyBuildProject(cf.mpsTesting.xml), not layered onto the production jar. - Validate cheap first: regenerate, then run
ant -f build/<projectName>.xml assemblein isolation before running the fullbuild/run_build.sh.
Common-Path Workflow — Bundle a New Plain Java/Kotlin Plugin
Running example: bundling plugins/mcp-tools (a JAVA_MODULE with Kotlin sources, depending on com.intellij.mcpServer).
- Diagnose where the plugin currently is.
grep -r <plugin-name> build/(empty → no generated Ant script). Look underbuild/artifacts/<projectName>/,build/artifacts/mps/plugins/<x>/, and the final${build.number}*.zipto find which layer is missing it. Seereferences/diagnostics.md. - Pick a shape. Model it like
mpsHttpSupportPlugin(Option A, preferred — full Ant compile pipeline) or likemcpserver/terminal(Option B — pre-built, copied from<MPS>/plugins/<x>/bympsStandalone). Seereferences/plugin-bundling-options.md. - Author in
build.mps. Add aBuildProject <projectName>with the rightBuildLayout(Java/Kotlin source roots,META-INF/plugin.xml, jar packaging, dependencies viaBuildSource_JavaDependencyModule/…ExternalJar). Carry theBuildJavaPluginmarker so the generator emits a plain compile pipeline. Depend onmpsBootstrapCore(and likelympsCore/mpsWorkbench). Seereferences/build-mps-authoring.md. - Wire it into the aggregator. Edit the
mpsaggregator BuildProject so it imports${artifacts.<projectName>}, copies${artifacts.<projectName>}/<plugin-folder>into${build.layout}/plugins/<plugin-folder>, and invokes the new Ant file in itsbuildDependents. Add the same<ant antfile="build/<projectName>.xml" …/>line tompsDistribution.xml'sbuildDependents. - Regenerate
build.mps. A newbuild/<projectName>.xmlwill appear;build/mps.xmlandbuild/mpsDistribution.xmlwill be updated by the same regeneration. - Smoke step (no full build). Run
ant -f build/<projectName>.xml assemblein isolation. Pre-runant -f build/build.xml platformonce so the IDEA jars exist on disk. - Full build via
build/run_build.sh. Verify the three artefact locations inreferences/validation.md. - If the plugin has a
test/source root, add a sibling test-onlyBuildProject(<projectName>Tests) — seereferences/test-suite-wiring.md.
Pipeline at a Glance
build.xml build.txt dependencies.properties
│ │ │
├─ platform ───────────► Ivy fetches IDEA + libs into <MPS>/lib, <MPS>/plugins/*
│ (getDependencies.xml)
│
├─ getResourcesAndBuildAll
│ └─ mpsDistribution.xml buildDependents
│ ├─ mpsTrueBootstrap.xml ──┐
│ ├─ mpsBootstrapCore.xml │ per-plugin Ant scripts
│ ├─ mpsCore.xml │ (compile + jar + layout into
│ ├─ mpsWorkbench.xml │ build/artifacts/<projectName>/)
│ ├─ mpsBuild.xml │
│ ├─ mpsTesting.xml │
│ ├─ mpsPlugins.xml │
│ ├─ mpsJava.xml │
│ ├─ mpsHttpSupportPlugin.xml│
│ ├─ mpsKotlinPlugin.xml │
│ ├─ mpsContextActionsTool.xml│
│ ├─ … (30+ files) ─┘
│ └─ mps.xml (aggregates into build/artifacts/mps/)
│
└─ assemble
└─ mpsDistribution.xml assemble (zips/tars into build/artifacts/mpsDistribution/)
Related Skills
mps-build-language— when you are authoring or editing the build language model itself, not just consuming its output.mps-tests— when the plugin you are bundling has a JUnit / MPS test suite that must run in CI.mps-ide-plugin— when the new module is an MPS IDE plugin (plugin.xml, actions, tool windows). Bundling and IDE-plugin authoring are independent steps.mps-aspect-generator— when the failure is in MPS generation rather than packaging.
Reference Index
- Open
references/architecture.mdfor the long form of "how Ant files compose" — entry pointbuild/build.xmltargets, the three layers of generated scripts (mpsTrueBootstrap.xml/mpsBootstrapCore.xml/per-plugin files;mps.xmlaggregator;mpsStandalone.xml), and the final distribution layermpsDistribution.xmlwith its per-platform archives. Open when you need to know where a particular file lives in the pipeline or what itsbuildDependentsdoes. - Open
references/build-mps-source-of-truth.mdwhen editingplugins/mps-build/solutions/mpsBuild/models/build.mps— explains theBuildProjectstructure, the meaning of opaque concept indices (1l3spW,398b33,TrG5h,turDy,2DA0ip,1l3spV,10PD9b), and how regeneration writes thebuild/*.xmlfiles. - Open
references/plugin-bundling-options.mdto choose between Option A (full Ant compile pipeline likempsHttpSupportPlugin) and Option B (pre-built drop intompsStandalone). Includes the rationale for picking Option A for new MPS-authored plugins. - Open
references/build-mps-authoring.mdwhen adding the newBuildProjecttobuild.mps—BuildLayoutshape,BuildSource_JavaModule/BuildSource_JavaContentRoot, theBuildJavaPluginmarker, dependency chain throughmpsBootstrapCore, and the convention for referencing fetched IDEA-plugin jars via${basedir}/plugins/<idea-plugin>/lib/. - Open
references/diagnostics.mdwhen a plugin is missing from the distribution and you need to figure out which layer dropped it — three-step diagnosis usinggrep,build/artifacts/<projectName>/, andbuild/artifacts/mps/plugins/<x>/. - Open
references/validation.mdfor the two-stage validation procedure (cheapant -f build/<projectName>.xml assemblesmoke step, then fullbuild/run_build.sh) and the three artefact locations to verify after a full build. - Open
references/touchpoint-checklist.mdfor the table of files modified by adding a new Option A plugin — what is hand-edited (build.mps), what is regenerated (build/<projectName>.xml,build/mps.xml,build/mpsDistribution.xml), and what stays unchanged (plugins/<plugin>/META-INF/plugin.xml,.iml). - Open
references/test-suite-wiring.mdwhen the new plugin has atest/source root that must run in CI — sibling test-onlyBuildProject, JUnit launcher, and…Tests.xmlaggregator wiring. - Open
references/key-files.mdfor the quick reference of every build file mentioned anywhere in this skill, with one-line descriptions.
Signals
- GitHub stars
- 2k
- Forks
- 309
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
mps-distribution-build- Source
- github.com/jetbrains/mps