PMD 在 intellij 中作为外部工具工作

PMD working inside intellij as an External Tool

我想这样做,这样我就可以 运行 使用 intellij 14.x

作为外部工具进行 PMD 检查

我能找到的唯一文档是基于 pmd 4.x 的陈旧且过时的文档。我如何让它正常工作?有没有人使用 PMD 作为外部工具?我尝试下载内置的 PMD 插件,但是当我将它指向我的 custom_pmd_ruleset.xml 时,它完全忽略了它 --> 可能插件坏了。

经过大量研究后,以下是对我有用的方法:

下面是图片中超长且被截断的类路径部分:

-cp "C:\Users\nate\.m2\repository\commons-io\commons-io.4\commons-io-2.4.jar;C:\Users\nate\.m2\repository\org\apache\commons\commons-lang3.3.2\commons-lang3-3.3.2.jar;C:\Users\nate\.m2\repository\net\sourceforge\pmd\pmd-core.3.2\pmd-core-5.3.2.jar;C:\Users\nate\.m2\repository\net\sourceforge\pmd\pmd-java.3.2\pmd-java-5.3.2.jar;C:\Users\nate\.m2\repository\asm\asm.1\asm-3.1.jar;C:\Users\nate\.m2\repository\jaxen\jaxen.1.1\jaxen-1.1.1.jar;C:\Users\nate\.m2\repository\com\beust\jcommander.48\jcommander-1.48.jar" net.sourceforge.pmd.PMD -R "$ModuleFileDir$\src\test\resources\custom-pmd-rules.xml" -d "$FileDirRelativeToProjectRoot$/$FileName$"

希望这可以节省一些人让它工作的时间。享受吧。

命令行解析器在 PMD 5.0.1 中发生了变化,但遗憾的是文档从未更新过。这些是更改:

  • args[0] 现在是 -dir
  • args[1] 现在是 -format
  • args[2] 现在是 -rulesets

当你-format ideaj时,它还需要三个参数。那些特定于报告格式的参数现在用 -property {name}={value}:

指定
  • args[3] 现在是 -property sourcePath
  • args[4] 现在是 -property classAndMethodName
  • args[5] 现在是 -property singleFileName

PMD 4 documentation中给出的示例命令行使用的参数:

"$FilePath$"              # args[0]
ideaj                     # args[1]
unusedcode,imports        # args[2]
"$Sourcepath$"            # args[3]
$FileClass$.method        # args[4] 
$FileName$                # args[5]

注意文档中的第 4 个参数实际上是错误的,$FileClass.method 应该是 $FileClass$.method

所以在 PMD 5 中,这是:

pmd \
    -dir "$FilePath$" \
    -format ideaj \
    -rulesets "unusedcode,imports" \
    -property sourcePath="$Sourcepath$" \
    -property classAndMethodName="$FileClass$.method" \
    -property singleFileName="$FileName$

您可以像这样配置 IntelliJ:

  • 文件 > 设置
  • 工具 > 外部工具
  • 添加一个新的外部工具:
    • 姓名:PMD(或任何您喜欢的名字)
    • 描述:PMD 源代码分析器(或任何你喜欢的)
    • 选项:执行后同步文件;打开控制台
    • 显示在:主菜单;编辑器菜单;项目意见;搜索结果
    • 程序:path/to/pmd-bin-5.8.1/bin/run.sh
    • 参数:pmd -dir "$FilePath$" -format ideaj -rulesets "unusedcode,imports" -property sourcePath="$Sourcepath$" -property classAndMethodName="$FileClass$.method" -property singleFileName="$FileName$
    • 工作目录:$ProjectFileDir$