import java.io.*; import java.nio.file.*; import net.sourceforge.pmd.*; import net.sourceforge.pmd.renderers.*; public class PmdRunner { public static void main(String[] args) throws Exception { if (args.length < 2) { System.err.println("Usage: PmdRunner "); System.exit(1); return; } String filePath = args[0]; String rulesetPath = args[1]; Path tempFile = null; if ("-".equals(filePath)) { String code = new String(System.in.readAllBytes()); tempFile = Files.createTempFile("pmd-stdin-", ".java"); Files.writeString(tempFile, code); filePath = tempFile.toString(); } try { PMDConfiguration config = new PMDConfiguration(); config.addRuleSet(rulesetPath); Writer writer = new StringWriter(); JsonRenderer renderer = new JsonRenderer(); renderer.setWriter(writer); try (PmdAnalysis pmd = PmdAnalysis.create(config)) { pmd.files().addFile(Path.of(filePath)); pmd.addRenderer(renderer); pmd.performAnalysis(); } System.out.print(writer.toString()); } finally { if (tempFile != null) { Files.deleteIfExists(tempFile); } } } }