The Rule Designer is a graphical tool that helps PMD users develop their custom rules. Main features:
The designer is part of PMD's binary distributions. To install a distribution, see the documentation page about installing PMD.
The app needs either Oracle Java 8 (which includes JavaFX) or OpenJDK 11+ and a separately installed
OpenJFX distribution. Visit JavaFX - Gluon to download an SDK distribution,
extract it, and set the JAVAFX_HOME
environment variable.
If the bin
directory of your PMD distribution is on your shell's path, then you can launch the app with
pmd designer
on Linux/ OSXpmd.bat designer
on WindowsAlternatively, you can launch the program "from source" with Maven.
$ ./mvnw -Prunning exec:java
will launch the program after compiling it, using the JavaFX distribution of your system$ ./mvnw -Prunning,with-javafx exec:java
will also add JavaFX dependencies on your classpath.
You can change the version of those dependencies with eg -Dopenjfx.version=21.0.2
for OpenJFX 21.
See the list of available versions here.The latest version of the designer currently works with PMD 7.0.0 and above.
You can simply replace pmd-designer-7.X.Y.jar
with the latest build
in the installation folder of your PMD distribution.
See CONTRIBUTING.md for instructions to build the project from source and setup your IDE.
You can package a runnable jar containing the PMD dependencies with maven. For now the only option is to build a jar that contains pmd-core and pmd-java:
./mvnw clean package -Dfat-java -Dpmd.core.version=7.0.0-SNAPSHOT
The pmd.core.version
property selects the version of pmd-core and pmd-java
that will be included. The built jar can then be found in your target
directory.
Such a jar cannot be used in a PMD distribution and must be used in a
standalone fashion, otherwise classpath conflicts may arise.
You can additionally enable the profile with-javafx
to include openjfx as well.
You should never run the install
goal with the -Dfat-java
property! This
would install the fat jar in your local repo and may cause dependency conflicts.