You want to package your language as a plugin for distribution. You have sorted out the build script
dependencies and created an
project structure section of the build script with your languages as the content. Now MPS reports an error for
the contents, showing you a long list of “unsatisfied dependencies”:
Now when you go and try to add these dependencies to the
idea plugin’s dependency section, you find that they are not
listed in the completion menu. What’s going on and how to fix this?
What does MPS want from me?
The names listed in the error message (“org.iets3.core.base”, “jetbrains.mps.ide.build”, etc.) are modules. The error message is trying to tell you that one of the modules included in the plugin needs another module to run, and this module was not found among the plugin’s dependencies.
To satisfy the dependencies we need to add the necessary plugins to the dependencies list of our plugin. Here comes a catch: how do you know what plugin to include for what module? As is quite often the case with MPS, there are two ways: guessing and looking around.
Approach 1: Guessing
iets3 in the completion menu:
org.iets3.core.os looks promising since we are looking for
org.iets3.core.base and it has
core in it as well.
Voila! It turns out, this actually fixes most of the errors:
We can then try guessing where the remaining dependencies come from.
Approach 2: Looking around
Since we expect
org.iets3.core.base module to be part of the IETS3 project, let’s go to our dependencies section and
Ctrl/Cmd+Click on the
org.iets3.opensource build script. It’s a fairly long script with several plugins and
lots of languages and solutions. We can search the build script for
org.iets3.core.base using text search
It turns out, however, that none of the plugins listed include
org.iets3.core.base directly. The reason is that the
languages and solutions in the build script are organized into
mps groups and plugins reference these “mps groups”.
Scrolling up a bit from our
org.iets3.core.base module we see that it is included in
mps group iets3.core.os.
Now we search the build script again for
iets3.core.os and discover that it is part of the
Armed with this knowledge, we now go back to our original build script and add the
org.iets3.core.os plugin to the
dependencies of our plugin.
- If you also get errors about “dependency on a module not visible from the build script”
- Although the list of the missing dependencies may look quite intimidating, as we have seen with the “Guessing” approach,adding one dependency may reduce it quite dramatically. For this reason, it’s better to start with the highest-level dependencies first as they will potentially have many transitive dependencies.