如何在 bash 中 运行 PMD

How to run PMD in bash

我目前正尝试使用命令 "run.sh pmd -d -f -R" 在 git bash 上 运行 PMD,但我收到一条错误消息 'Could not find or load main class net.sourceforge.pmd.PMD'。我试过在环境变量中设置类路径,但仍然出现错误。有谁知道问题出在哪里?

这似乎是 PMD run.sh 脚本中的错误。它支持 cygwin 环境,但 git bash 环境似乎不是普通的 cygwin 环境(尽管所有必需的 cygwin 命令都在那里)。

脚本构建类路径。由于它在类似 cygwin 的环境下运行,类路径看起来像“/c/pmd-bin-5.5.4/lib/pmd-core-5.5.4.jar:...”。但是,Java Runtime 在 Windows(而不是 cygwin)下运行,因此需要将路径转换为 ​​"C:\pmd-bin-5.5.4\lib\pmd-core-5.5.4.jar;..."。请注意,使用了路径的 Windows 符号(驱动器号和分号作为路径分隔符)。

该脚本使用uname 命令来确定它是否在类似cygwin 的环境下运行。它只检查 "CYGWIN"。但是 git bash 使用例如"MINGW64_NT-10.0".

现在有the new issue #305,应该会尽快修复。

您可以手动修复脚本 bin/run.sh,方法是将函数 is_cygwin 更改为:

is_cygwin() {
    case "$(uname)" in
        CYGWIN*|MINGW*)  # look also for MINGW!!
            readonly cygwin=true
            ;;
    esac
    # OS specific support.  $var _must_ be set to either true or false.
    if [ -z ${cygwin} ] ; then
        readonly cygwin=false
    fi
}