The problem
You want to package your language as a plugin for distribution. You have sorted out the build script
dependencies and created an idea plugin
in the 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.
The fix
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
Let’s type iets3
in the completion menu:
Here 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
(Ctrl/Cmd+F).
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 org.iets3.core.os
plugin.
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.
Tips
- 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.