{"id":13314098,"url":"https://github.com/mbeddr/mps-gradle-plugin","last_synced_at":"2026-02-18T15:30:48.575Z","repository":{"id":42425299,"uuid":"84947979","full_name":"mbeddr/mps-gradle-plugin","owner":"mbeddr","description":"Miscellaneous tasks that were found useful when building MPS-based projects with Gradle.","archived":false,"fork":false,"pushed_at":"2026-02-07T18:10:09.000Z","size":1177,"stargazers_count":15,"open_issues_count":25,"forks_count":16,"subscribers_count":19,"default_branch":"master","last_synced_at":"2026-02-08T02:36:37.451Z","etag":null,"topics":["build","build-tool","dmg","gradle","gradle-plugin","jetbrains-mps","rcp"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mbeddr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-03-14T12:45:09.000Z","updated_at":"2025-10-06T09:01:21.000Z","dependencies_parsed_at":"2023-02-18T08:15:58.099Z","dependency_job_id":"6aba8577-133c-400c-8197-99803367fed4","html_url":"https://github.com/mbeddr/mps-gradle-plugin","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mbeddr/mps-gradle-plugin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbeddr%2Fmps-gradle-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbeddr%2Fmps-gradle-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbeddr%2Fmps-gradle-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbeddr%2Fmps-gradle-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mbeddr","download_url":"https://codeload.github.com/mbeddr/mps-gradle-plugin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbeddr%2Fmps-gradle-plugin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29583916,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T13:56:48.962Z","status":"ssl_error","status_checked_at":"2026-02-18T13:54:34.145Z","response_time":162,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["build","build-tool","dmg","gradle","gradle-plugin","jetbrains-mps","rcp"],"created_at":"2024-07-29T18:10:26.084Z","updated_at":"2026-02-18T15:30:48.558Z","avatar_url":"https://github.com/mbeddr.png","language":"Kotlin","funding_links":[],"categories":["[Awesome MPS](#awesome-MPS)"],"sub_categories":["Plugins"],"readme":"# mps-gradle-plugin\n\n[![artifacts.itemis.cloud](https://img.shields.io/badge/dynamic/xml?url=https://artifacts.itemis.cloud/repository/maven-mps/de/itemis/mps/mps-gradle-plugin/maven-metadata.xml\u0026label=artifacts.itemis.cloud\u0026color=success\u0026query=.//versioning/latest)](https://artifacts.itemis.cloud/#browse/browse:maven-mps:de%2Fitemis%2Fmps%2Fmps-gradle-plugin)\n[![Github pages](https://img.shields.io/badge/Github-pages-success)](https://github.com/orgs/mbeddr/packages?repo_name=mps-gradle-plugin)\n[![projects.itemis.de](https://img.shields.io/badge/dynamic/xml?url=https://projects.itemis.de/nexus/content/repositories/mbeddr/de/itemis/mps/mps-gradle-plugin/maven-metadata.xml\u0026label=projects.itemis.de\u0026color=inactive\u0026query=.//versioning/latest)](https://projects.itemis.de/nexus/#nexus-search;gav~de.itemis.mps~mps-gradle-plugin~~~)\n\nMiscellaneous tasks that were found useful when building MPS-based\nprojects with Gradle.\n\n# Version 2.x\n\nVersion 2.x of the plugin is somewhat experimental and incompatible with 1.x because all extensions and tasks were \nconverted to use Gradle lazy properties.\n\n# Using the Plugin\n\nAdd the following `buildscript` block to your build script:\n\n```\nbuildscript {\n    repositories {\n        maven { url 'https://artifacts.itemis.cloud/repository/maven-mps' }\n        mavenCentral()\n    }\n\n    dependencies {\n        classpath 'de.itemis.mps:mps-gradle-plugin:1.2.+'\n    }\n}\n```\n\nUse a fully specified version such as `1.0.123` for better build reproducibility.\n\n# Features\n\n## RunAntScript\n\nThis task is the base for other tasks that run MPS-generated Ant scripts (`BuildLanguages`, `TestLanguages`).\n\nThe custom tasks are useful when you don't check in the build scripts generated by MPS into source control but want to\ngenerate them during the Gradle build. In that case you can't use the Ant integration of Gradle to run these files\nbecause they may not exist yet when the build is started.\n\n### Usage \n\nParameters:\n\n- `script`: path to the ANT to execute\n- `scriptClasspath`: classpath used for the JVM that will execute the generated ANT script. Needs to contain ANT to be \n  able to run the build script. See below section \"Providing Global Defaults\" for project wide defaults.\n- `scriptArgs`: additional command line arguments provided to the JVM that will execute the generated ANT scripts. This\n  is often used to provide property valued via \"-Dprop=value\". See below section \"Providing Global Defaults\" for project wide defaults.\n- `executable`: the `java` executable to use. Optional. If `itemis.mps.gradle.ant.defaultJavaExecutable` extended\n  property is set, its value is used as the default value for the parameter.\n- `includeDefaultArgs`: controls whether the project-wide default values for arguments are used. \n  It's set to `true` by default.\n- `includeDefaultClasspath`: controls whether the project-wide default values for the classpath are used. \n  It's set to `true` by default.\n- `targets`: the targets to execute of the ANT files.\n- `incremental`: enable incremental build, see below. (Since 1.6.)\n\n### Providing Global Defaults For Class Path And Arguments\n\nAll tasks derived from the `RunAntScript` base class allow to specify default values for the classpath and script arguments\nvia project properties. By default these values are added to the value specified for the parameters `scriptArgs` and \n`scriptClasspath` if they are present. To opt out from the defaults see above the parameters `includeDefaultArgs` and \n`includeDefaultClasspath`.\n\nThe property `itemis.mps.gradle.ant.defaultScriptArgs` controls the default arguments provided to the build scripts \nexecution. In belows example the default arguments contain the version and build date. At runtime the default arguments\nare combined with the arguments defined via `scriptArgs`. \n\nThe property `itemis.mps.gradle.ant.defaultScriptClasspath` controls the default classpath provided to the build scripts\nexecution. In belows example the classpath contains ANT (via dependency configuration) and the tools jar from the JDK.\nAt runtime the default classpath are combined with the classpath defined via `scriptClasspath`.  \n```\ndef defaultScriptArgs = [\"-Dversion=$version\", \"-DbuildDate=${new Date().toString()}\"]\ndef buildScriptClasspath = project.configurations.ant_lib.fileCollection({true}) + project.files(\"$project.jdk_home/lib/tools.jar\")\n\next[\"itemis.mps.gradle.ant.defaultScriptArgs\"] = defaultScriptArgs\next[\"itemis.mps.gradle.ant.defaultScriptClasspath\"] = buildScriptClasspath\n```\n\n### Providing Global Defaults For The Java Executable\n\nThe `itemis.mps.gradle.ant.defaultJavaExecutable` property specifies the value to use as the underlying\n`JavaExec.executable`. The `executable` parameter of each individual task takes precedence over the global default.\n\n### Incremental Builds\n\nIncremental builds can be enabled by setting the `incremental` property to `true`. This has the following effects:\n* The `clean` target is removed from the `targets` list.\n* Argument `-Dmps.generator.skipUnmodifiedModels=true` is passed to Ant. This property tells the MPS generator to skip \n  generating and compiling models that have not been modified.\n\nNOTE: While incremental builds are convenient, it is necessary to be aware of their limitations. To determine whether\na model should be regenerated the generator only looks at the hash of the model contents. If the contents have not\nchanged since the last generation the generation is skipped. This may not be fully correct in the general case. Changing\nthe generator of a language used by the model may affect the generated code for the model, for example. Changes in\nimported models may affect the generation output of this model as well. None of these changes would be detected via the\nmodel contents hash.\n\n## CreateDmg\n\n(macOS only) Creates a .dmg installer by combining an RCP artifact (as\ncreated by an MPS-generated Ant script), a JDK, and a background image.\n\n### Usage\n\n```\ntask buildDmg(type: de.itemis.mps.gradle.CreateDmg) {\n    rcpArtifact file('path/to/RCP.tgz')\n\n    jdkDependency \"com.jetbrains.jdk:jdk:${jdkVersion}:osx_x64@tgz\"\n    // -or -\n    jdk file('path/to/jdk.tgz')\n\n    backgroundImage file('path/to/background.png')\n    dmgFile file('output.dmg')\n\n    signKeyChain file(\"/path/to/my.keychain-db\")\n\n    signKeyChainPassword \"my.keychain-db-password\"\n\n    signIdentity \"my Application ID Name\"\n}\n```\n\nParameters:\n* `rcpArtifact` - the path to the RCP artifact produced by a build script.\n* `jdkDependency` - the coordinates of a JDK in case it's available in\n  a repository and can be resolved as a Gradle dependency.\n* `jdk` - the path to a JDK .tgz file.\n* `backgroundImage` - the path to the background image.\n* `dmgFile` - the path and file name of the output DMG image. Must end\n  with `.dmg`.\n* `signKeyChain (optional)` - the path and file name of the keychain which contains a code signing certificate.\n* `signKeyChainPassword (optional)` - the password which should be use to unlock the keychain.\n* `signIdentity (optional)` - the application ID of the code signing certificate.\n\n### Operation\n\nThe task unpacks `rcpArtifact` into a temporary directory, unpacks\nthe JDK given by `jdkDependency`/`jdk` under the `jre` subdirectory of\nthe unpacked RCP artifact, fixes file permissions and creates missing\nsymlinks. If the additional properties for code signing (`signKeyChain`, `signKeyChainPassword`, `signIdentity`) are defined,\nthe application will be signed with the given certificate. Afterwards a DMG image is created and its layout is configured using the\nbackground image. Finally, the DMG is copied to `dmgFile`.\n\n## BundleMacosJdk\n\n(Linux/macOS) Creates a .tar.gz by combining an RCP artifact and a JDK.\nThis task is intended as a substitute for the macOS-specific CreateDmg\ntask.\n\n### Usage\n\n```\ntask bundleMacosJdk(type: de.itemis.mps.gradle.BundleMacosJdk) {\n    rcpArtifact file('path/to/RCP.tgz')\n\n    jdkDependency \"com.jetbrains.jdk:jdk:${jdkVersion}:osx_x64@tgz\"\n    // -or -\n    jdk file('path/to/jdk.tgz')\n\n    outputFile file('output.tar.gz')\n}\n```\n\nParameters:\n* `rcpArtifact` - the path to the RCP artifact produced by a build script.\n* `jdkDependency` - the coordinates of a JDK in case it's available in\n  a repository and can be resolved as a Gradle dependency.\n* `jdk` - the path to a JDK .tgz file.\n* `outputFile` - the path and file name of the output gzipped tar archive.\n\n### Operation\n\nThe task unpacks `rcpArtifact` into a temporary directory, unpacks\nthe JDK given by `jdkDependency`/`jdk` under the `jre` subdirectory of\nthe unpacked RCP artifact, fixes file permissions and creates missing\nsymlinks. Finally, the file is repackaged again as tar/gzip.\n\n## GenerateLibrariesXml\n\nGenerates a `.mps/libraries.xml` file using data from property files.\n\n### Usage\n\n```\ntask generateLibrariesXml(type: de.itemis.mps.gradle.GenerateLibrariesXml) {\n    defaults rootProject.file('projectlibraries.properties')\n    overrides rootProject.file('projectlibraries.overrides.properties')\n    destination file('.mps/libraries.xml')\n}\n```\n\nParameters:\n* `defaults` - path to default properties (checked in to version control)\n* `overrides` - path to property overrides (ignored, not checked in to\n  version control, absent by default)\n* `destination` - path to the output `libraries.xml`\n\n### Operation\n\nThe task reads properties file `defaults`, then `overrides` (if\npresent). `destination` is then generated based on the properties.\n\nEach property represents an entry in `destination` (a project library),\nwhere the property name is the library name and the property value is\nthe path to the library.\n\n## Generate\n\nGenerate a specific or all models in a project without the need for a MPS model.\n\nWhile technically possible generating languages with this task makes little sense as there is no way of packaging the\ngenerated artifacts into JAR files. We only recommend using this for simple tasks where user defined models should be\ngenerated in the CI build or from the commandline.\n\n### Usage\n\nA minimal build script to generate a MPS project with no external plugins would look like this:\n\n```\napply plugin: 'generate-models'\n\nconfigurations {\n    mps\n}\n\next.mpsVersion = '2018.3.6'\n\ngenerate {\n    projectLocation.set(new File(\"./mps-prj\"))\n    mpsConfig.set(configurations.mps)\n}\n\ndependencies {\n    mps \"com.jetbrains:mps:$mpsVersion\"\n}\n```\n\nParameters:\n* `mpsConfig` - the configuration used to resolve MPS. Currently only vanilla MPS is supported and no custom RCPs.\n  Custom plugins are supported via the `pluginLocation` parameter.\n* `mpsLocation` - optional location where to place the MPS files.\n* `mpsVersion` - optional if you use a [custom distribution](#custom-mps-distribution) of MPS\n* `javaExec` - optional `java` executable to use.\n* `pluginLocation` - location where to load the plugins from. Structure needs to be a flat folder structure similar to the\n  `plugins` directory inside of the MPS installation.\n* `plugins` - optional list of plugins to load before generation is attempted.\n  The notation is `new Plugin(\"pluginID\", \"somePath\")`. The first parameter is the plugin id.\n  For the second parameter `\"somePath\"` there are several options:\n  * if it's an absolute path, the plugin is loaded from that path\n  * if it's a folder located under `pluginLocation` the plugin is loaded from  that folder\n  * otherwise it should be a plugin folder located under the default `mps/plugins` \n* `models` - optional list of models to generate. If omitted all models in the project will be generated. Only full name\n  matched are supported and no RegEx or partial name matching.\n* `macros` - optional list of path macros. The notation is `new Macro(\"name\", \"value\")`.\n* `projectLocation` - location of the MPS project to generate.\n* `debug` - optionally allows to start the JVM that is used to generated with a debugger. Setting it to `true` will cause\n  the started JVM to suspend until a debugger is attached. Useful for debugging classloading problems or exceptions during\n  the build.\n\n## Model Check\n\nRun the model check on a subset or all models in a project directly from gradle.\n\nThis functionality currently runs all model checks (typesystem, structure, constrains, etc.) from gralde. By default if\nany of checks fails the complete build is failed. All messages (Info, Warning or Error) are reported through log4j to\nthe command line.\n\n### Usage\n\nA minimal build script to check all models in a MPS project with no external plugins would look like this: \n\n```\napply plugin: 'modelcheck'\n\nconfigurations {\n    mps\n}\n\ndependencies {\n    mps \"com.jetbrains:mps:$mpsVersion\"\n}\n\next.mpsVersion = '2018.3.6'\n\nmodelcheck {\n    projectLocation.set(new File(\"./mps-prj\"))\n    mpsConfig.set(configurations.mps)\n    macros.set([Macro(\"mypath\", \"/your/path\")])\n}\n```\n\nParameters:\n* `mpsConfig` - the configuration used to resolve MPS. Currently only vanilla MPS is supported and no custom RCPs.\n  Custom plugins are supported via the `pluginLocation` parameter.\n* `mpsLocation` - optional location where to place the MPS files.\n* `mpsVersion` - optional if you use a [custom distribution](#custom-mps-distribution) of MPS\n* `javaExec` - optional `java` executable to use.\n* `pluginLocation` - location where to load the plugins from. Structure needs to be a flat folder structure similar to the\n  `plugins` directory inside of the MPS installation.\n* `plugins` - optional list of plugins to load before generation is attempted.\n  The notation is `new Plugin(\"pluginID\", \"somePath\")`. The first parameter is the plugin id.\n  For the second parameter `\"somePath\"` there are several options:\n  * if it's an absolute path, the plugin is loaded from that path\n  * if it's a folder located under `pluginLocation` the plugin is loaded from that folder\n  * otherwise it should be a plugin folder located under the default `mps/plugins` \n* `models` - optional list of models to check. RegEx can be used for matching multiple models.\n* `modules` - optional list of modules to check. Expects ordinary name (w/o virtual folders). RegEx can be used for matching multiple modules.\n  If both parameters, `models` and `modules`, are omitted - all models in the project will be checked.\n* `macros` - optional list of path macros. The notation is `new Macro(\"name\", \"value\")`.\n* `projectLocation` - location of the MPS project to check.\n* `errorNoFail` - report errors but do not fail the build.\n* `warningAsError` - handles warnings as errors and will fail the build if any is found when `errorNoFail` is not set. \n* `debug` - optionally allows to start the JVM that is used to load MPS project with a debugger. Setting it to `true` will cause\n  the started JVM to suspend until a debugger is attached. Useful for debugging classloading problems or exceptions during\n  the build.\n* `junitFile` - allows storing the the results of the model check as a JUnit XML file. By default, the file will contain one\n  testcase for each model that was checked (s. `junitFormat`).\n* `junitFormat` - allows to change the format of the JUnit XML file, how the model checking errors will be reported. Possible options:\n  * `model` (default) - generates one testcase for each model that was checked. If the model check reported any error for the model, \n    the testcase will fail and the message of the model checking error will be reported. \n  * `message` - generates one testcase for each model check error. For uniqueness reasons, the name of the testcase will reflect the specific\n    model check error and the name of the testclass will be constructed from the checked node ID and its containing root node. \n    Full error message and the node URL will be reported in the testcase failure. Checked models will be mapped to testsuites with this option.     \n* `maxHeap` - maximum heap size setting for the JVM that executes the modelchecker. This is useful to limit the heap usage\n  in scenarios like containerized build agents where the OS reported memory limit is not the maximum\n  to be consumed by the container. The value is a string understood by the JVM command line argument `-Xmx` e.g. `3G` or `512M\n\n### Additional Plugins\n\nBy default only the minimum required set of plugins are loaded. This includes base language and some utilities like the\nHTTP server from MPS. If your project requires additional plugins to be loaded this is done by setting plugin location\nto the place where your jar files are placed and adding your plugin id and folder name to the `plugins` list:\n\n```\napply plugin: 'modelcheck'\n...\n\nmodelcheck {\n    pluginLocation.set(new File(\"path/to/my/plugins\"))\n    plugins.set([new Plugin(\"com.mbeddr.core\", \"mbeddr.core\")])\n    projectLocation.set(new File(\"./mps-prj\"))\n    mpsConfig.set(configurations.mps)\n}\n\n```\n\nDependencies of the specified plugins are automatically loaded from the `pluginlocation` and the plugins directory of\nMPS. If they are not found the the build will fail.\n\n## Run migrations\n\nRun all pending migrations in the project.\n\n### Usage\n\nA minimal build script to check all models in a MPS project with no external plugins would look like this:\n\n```\napply plugin: 'run-migrations\"'\n\nconfigurations {\n    mps\n}\n\ndependencies {\n    mps \"com.jetbrains:mps:$mpsVersion\"\n}\n\nrunMigrations {\n    projectLocation.set(new File(\"./mps-prj\"))\n    mpsConfig.set(configurations.mps)\n}\n```\n\nParameters:\n* `mpsConfig` - configuration used to resolve MPS.\n* `mpsLocation` - location where to place the MPS files.\n* `mpsVersion` - if you use a [custom distribution](#custom-mps-distribution) of MPS.\n* `projectLocation` - location of the project that should be migrated.\n* `force` - ignores the marker files for projects which allow pending migrations, migrate them anyway (supported in 2021.3.0 and higher)\n\nAt least `mpsConfig` or `mpsLocation` + `mpsVersion` must be set.\n\n## Download JetBrains Runtime\n\nWhen building MPS projects with the JatBrains Runtime, the JDK/JRE used by MPS and other intellij based IDEs, it's\nrequired to download the correct version of the runtime. Since the runtime is platform dependent it's required to \ndownload a platform dependent binary. While it's possible to add the logic to your own build script we provide a convenient\nway of doing this with a gradle plugin. \n\nThe download-jbr plugin will add new dependencies and a task to your build. It will add a dependency to `com.jetbrains.jdk:jbr`\nto your build, you need to make sure that it is available in your dependency repositories. The itemis maven repository at \n`https://artifacts.itemis.cloud/repository/maven-mps` provides this dependency, but you can create your own with\nthe scripts located in mbeddr/build.publish.jdk \n\nFor easy consumption and incremental build support the plugin creates a task `downloadJbr` which exposes the location of \nthe java executable via the `javaExecutable` property. See the tests in src/test/kotlin/JBRDownloadTest.kt for an example\nhow to use it. \n\n### Usage\n\n\nKotlin: \n```\nplugins {\n    id(\"download-jbr\")\n}\n\nrepositories {\n    mavenCentral()\n    maven {\n        url = URI(\"https://artifacts.itemis.cloud/repository/maven-mps\")\n    }\n}\n\ndownloadJbr {\n    jbrVersion.set(\"11_0_10-b1145.96\")\n}\n```\n\nGroovy: \n```\napply plugin: 'download-jbr'\n...\n\nrepositories {\n    maven { url 'https://artifacts.itemis.cloud/repository/maven-mps' }\n    mavenCentral()\n}\n\ndownloadJbr {\n    jbrVersion.set('11_0_10-b1145.96')\n}\n```\n\n### Parameters\n* `jbrVersion` - version of the JBR to download. While this supports maven version selectors we highly recomment not\n  using wildcards like `*` or `+` in there for reproducible builds. \n* `distributionType` - optional distribution type for the JBR to use. Will default to `jbr_jcef` if omitted. \n* `downloadDir` - optional directory where the downloaded JBR is downloaded and extracted to. The plugin defaults to\n  `build/jbrDownload`\n  \n## Custom MPS Distribution\n\nFeatures that perform an action inside an MPS project, like the `modelcheck` or `generate-models` plugin, require \nan MPS available to them. While for vanilla MPS it is enough to pass in a  reference to the MPS dependency via the\n`mpsConfig` property this doesn't work for custom distributions of MPS. A custom distribution of MPS is also called \na MPS RCP. If you like to use your own MPS distribution with preinstalled plugins and your own versioning scheme \nthen this is possible but requires additional steps in the build script. \n\nWhen you are using a custom distribution of MPS you can no longer use the `mpsConfig` property and rely on \nthe plugin resolving it. The plugin needs to be configured with the properties `mpsVersion` and `mpsLocation`\nbeing set and no value set for `mpsConfig`. If you set `mpsVersion` but also set `mpsConfig` then `mpsConfig` \nwill take precedence over `mpsVersion` and the plugin will resolve that configuration into `mpsLocation`. \n\n`mpsVersion` needs to be set to the exact MPS version your custom distribution is based on e.g. if you build a\nRCP with MPS 2020.3.4 you need to set this property to `2020.3.4`. `mpsLocation` needs to point to the location\nwhere you extracted your custom MPS distribution into e.g. `$buildDir/myAwesomeMPS` if you extracted into that location. \n\nEach of the plugins creates a `resolveMpsFor\u003cname\u003e` task in the build. When `mpsVersion` and `mpsLocation` are set\nthis task is still present in the task graph but becomes a noop. The task is present to be able to add your own task(s)\nas dependency to it. This is useful for extracting your custom distribution before its being used. A minimal example\ncould look like this: \n\n```\ndef myCustomLocation = \"$buildDir/myAwesomeMPS\"\n\ntask downloadAndExtractCustomMPS() {\n    // your logic to download and extract here\n}\n\nmodelcheck {\n    mpsLocation.set(myCustomLocation)\n    mpsVersion.set(\"2020.3.4\")\n    projectLocation.set(file(\"$rootDir/mps-prj\"))\n    modules.set([\"my.solution.with.errors\"])\n    junitFile.set(file(\"$buildDir/TEST-modelcheck-results.xml\"))\n}\n\ntasks.getByName(\"resolveMpsForModelcheck\").dependsOn(downloadAndExtractCustomMPS)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmbeddr%2Fmps-gradle-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmbeddr%2Fmps-gradle-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmbeddr%2Fmps-gradle-plugin/lists"}