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$
我想这样做,这样我就可以 运行 使用 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$