Gradle plugin to develop plugins for MagicDraw
The MagicDraw developer guide provides manuals to develop plugins for MagicDraw with either Eclipse or IntelliJ IDEA. Using build tools like Maven or Gradle is not supported, even if it can be considered best practice nowadays. This plugin tries to provide a set of tools to simplify the development of plugins for MagicDraw with Gradle.
The plugin is available via the Gradle plugin portal. Simply use the plugins
block to apply the plugin to your project:
plugins {
id 'de.lukaskoerfer.gradle.magicdraw' version '0.3'
}
The plugin does not require any other plugin. No other plugin will be applied automatically.
Once the plugin is applied, it can be configured via the magicDraw
closure:
magicDraw {
installDir = file('C:/MagicDraw')
plugins {
main {
id = 'my.plugin.id'
version = '1.2.3'
label = 'My plugin'
className = 'package.path.to.PluginClass'
provider = 'John Doe'
}
}
}
The most important configuration parameter is called installDir
and must be set to the installation directory of MagicDraw.
It is also possible to use the project property
magicDraw.installDir
to set the installation directory from the user-specificgradle.properties
file.
Every MagicDraw plugin needs a descriptor file (plugin.xml
) describing the most important aspects as the ID, the name, the version, the provider, the implementation class, referenced libraries and requirements regarding the MagicDraw API or other plugins.
The Gradle MagicDraw plugin will generate this descriptor file automatically. The descriptor file can be parametrized using the properties inside the magicDraw.plugins.main
closure.
For technical reasons, the descriptor attributes name, class and provider-name are mapped to properties with other names (label, className and provider).
The five properties in the example above are required for each plugin. However, only the label and the className must always be specified via the closure.
Both the id and the version can be left out, which will cause the Gradle MagicDraw plugin to use the Gradle properties project.group
and project.version
.
The provider property will default to the system property user.name
, if not specified.
When leaving out the properties id and version to use the Gradle properties
project.group
andproject.version
, it is necessary to specify those Gradle properties, otherwise the build will fail.
All MagicDraw libraries and their dependencies are provided in a single Gradle configuration called magicDraw
. To use these dependencies in compilation or to import them into an IDE, it may required to extend another configuration like compileOnly
:
configurations {
compileOnly.extendsFrom magicDraw
}
Another possible syntax is using a dependency:
dependencies {
compileOnly configurations.magicDraw
}
The compileOnly
configuration is used to prevent the MagicDraw dependencies from being carried around with the project, as they are available with any MagicDraw installation. Of course, it is possible to use other configurations like compile
or implementation
and to manually take care, e.g. when creating a "fat" jar.
The Gradle MagicDraw plugin will create the following tasks:
- assemblePlugin - Assembles all MagicDraw plugin components in this project
- launch - Launches MagicDraw with this plugin
- installPlugin - Installs this MagicDraw plugin into the local MagicDraw instance
- uninstallPlugin - Removes this MagicDraw plugin from the local MagicDraw instance
To let the Gradle MagicDraw plugin provide the highest possible amount of flexibility, it is not linked or integrated with any other plugin like the java
plugin.
By default, the assemblePlugin
task does not collect any files, so it is required to register any library files that are used to implement the plugin, e.g.:
assemblePlugin {
from jar
}
The example above can be used when using the java
plugin. To include any dependencies, it is required to add the runtime classpath, too:
assemblePlugin {
from jar
from configurations.runtime
}
Instead of passing all dependencies manually, it is also possible to use the com.github.johnrengelman.shadow
plugin and create a "fat" jar:
assemblePlugin {
from shadowJar
}
The software is licensed under the MIT license.