Ich habe Gradles PMD-Plugin noch nie benutzt und ich stehe in Schwierigkeiten, wenn ich Regelsätze zu meinem build.gradle
hinzufügen möchte. Die Pmd-Dokumentation ist nicht klar darüber, was die gültigen Werte von ruleSets
sind. Ihr Beispiel ist ruleSets = ["basic", "braces"]
und sie verlinken auf die "offizielle Liste" . Es gibt leider nicht viel zu tun.
Ich vermutete, dass der Abschnittstitel irgendwie auf die gültige Zeichenfolge verweist? Wie,
Aber was ist mit Dingen wie "Empty Code (java)" ?
Hier ist ein funktionierendes build.gradle
Beispiel:
Gradle spuckt den folgenden Fehler aus:
%Vor% Das Laufen mit --stacktrace
oder --debug
wie vorgeschlagen scheint nichts nützliches zu ergeben ...
Hinweis: Erstellen Sie eine Dummy-Datei wie src/main/java/Dummy.java
. Andernfalls wird der Build erfolgreich sein.
Wie soll ruleSets
angenommen werden ?
Es war einfacher, einen xml
-Regelsatz zu deklarieren, weil er eine feinkörnige Kontrolle über die Regeln bietet. Es ist in build.gradle
wie folgt enthalten:
Und die Regelsatzdatei sieht ungefähr so aus:
Hinweis: Dieses Beispiel ist für Gradel 1.10 geschrieben. Neuere Versionen von Gradle (ca. 2.0) verwenden eine neuere Version von PMD; Daher haben sich viele Pfade rulesets
geändert. So wird rulesets/logging-java.xml
jetzt zB in rulesets/java/logging-java.xml
gefunden.
Mir ist klar, dass dies eine riesige Bearbeitung ist, aber es ist im Wesentlichen eine andere Antwort. Nachdem ich mit Ihnen gesprochen und damit herumgespielt habe, habe ich festgestellt, dass das Gradle-Plugin eine etwas ältere Version der pmd-Bibliothek verwendet, als sie veröffentlicht wurde (nämlich Version 4.3); Es fehlen jedoch einige Regelsätze im Plugin, da die neueste PMD-Version 5.0.5 ist, die mit NullPointerException
bei Gradle und Java bricht. Nachdem ich nun das wohl syntaktisch korrekte und sorgfältigste Hello World Java-Programm meines Lebens geschrieben habe, um all diese zu testen, habe ich jetzt jedes einzelne Java-Regelwerk kompiliert, das mit dem Gradle-Plugin arbeitet:
Hier ist das Main.java:
%Vor%Hier ist der Build.gradle:
%Vor%und jetzt fragen Sie sich vielleicht, welche Regelsätze werden noch nicht unterstützt? Nun, die Antwort ist:
"comments"
"empty"
"unnecessary"
Vertrau mir, wenn ich sage, der Rest der Regeln funktioniert einwandfrei. Sie haben mich beim Schreiben einer Hello World auseinander gerissen. Also, ich hoffe, das hilft, das Verzeichnis, in dem alle Java-rulesets.xml-Dateien definiert sind: link zum github java ruleset-Verzeichnis von pmd Ich ignoriere die migrierten, weil sie nicht funktionierten. Ich denke, sie sind etwas Bestimmtes.
Viel Glück, und ich würde das Problem der fehlenden Regelsätze in den großen Foren ansprechen, um eine Petition einzureichen, um sie hinzuzufügen, oder um die Version zu aktualisieren. Oder Sie könnten das Plugin individuell kompilieren und es mit der neueren pmd-Version verknüpfen, wenn Sie wirklich verzweifelt nach den fehlenden Regelsätzen sind.
Die neueste Version von PMD
( 5.1.3
beim Schreiben dieser Antwort) wird von grdle unterstützt. Den Regelsätzen muss ein java-
Ich habe das mit gradle-1.12
Um PMD 5.1.3
mit Gradle zu verwenden, definiert die folgende Konfiguration alle möglichen Regelsätze, die ich finden könnte:
Referenz: Ссылка
Zu den anderen ausgezeichneten Antworten hier hinzufügen. Nach dem Anwenden von pmd auf Ihren Build und dem Aufruf von gradle pmdMain
, wird das pmd jar in Ihren Citrix Cache geladen. Von dort können Sie ausführen:
Und Sie erhalten die Ausgabe:
%Vor%Diese sind vielleicht nicht alle implementiert, aber es ist ein guter Ausgangspunkt. Eine Beschreibung der einzelnen Dateien finden Sie in der Dokumentation hier .
Wenn Sie Ihre eigene Datei rulset.xml verwenden, wie von kuporific beschrieben, wie:
%Vor%Gradle 1.10 verwendet eine Art von Standardregeln. Ja, es klagt, wenn der Dateipfad falsch ist, ja, es beschwert sich, wenn der Inhalt ungültig ist. Aber während der Überprüfung werden einige Standardregeln angewendet. Ich bin irgendwie überrascht, dass dies für dich funktioniert hat.
Siehe auch: Ссылка
Problemumgehung besteht nicht darin, ruleSetfiles zu verwenden, sondern sie einzeln zu referenzieren:
%Vor%