格拉德尔';s PMD插件:什么是可接受的参数? Java 1.7.0_40 格拉德尔1.10
我从未使用过Gradle的PMD插件,在尝试将规则集添加到我的格拉德尔';s PMD插件:什么是可接受的参数? Java 1.7.0_40 格拉德尔1.10,java,gradle,pmd,Java,Gradle,Pmd,我从未使用过Gradle的PMD插件,在尝试将规则集添加到我的build.Gradle时遇到了麻烦。不清楚规则集的有效值是什么。他们的例子是ruleSets=[“basic”,“brates”],它们链接到。不幸的是,没有太多事情要做 我猜部分标题以某种方式映射到有效字符串?像 ->“基本” ->“大括号” 但是像这样的事情呢 下面是一个正在运行的build.gradle示例: apply插件:“java” 应用插件:“pmd” 偏振模色散{ 规则集=[ //前两个更好,因为它在Javado
build.Gradle
时遇到了麻烦。不清楚规则集
的有效值是什么。他们的例子是ruleSets=[“basic”,“brates”]
,它们链接到。不幸的是,没有太多事情要做
我猜部分标题以某种方式映射到有效字符串?像
- ->“基本”
- ->“大括号”
build.gradle
示例:
apply插件:“java”
应用插件:“pmd”
偏振模色散{
规则集=[
//前两个更好,因为它在Javadoc中是正确的。。。
“基本”,
“大括号”,
//这一个不起作用,其他变化如
//“空代码”、“空代码”、“空代码”、“空代码”不起作用。
“空代码”
]
}
存储库{
mavenCentral()
}
Gradle指出了以下错误:
$ gradle check
:pmdMain FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':pmdMain'.
> Can't find resource emptyCode. Make sure the resource is a valid file or URL
or is on the CLASSPATH. Here's the current classpath:
/Users/kuporific/gradle/gradle-1.10/lib/gradle-launcher-1.10.jar
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug
option to get more log output.
BUILD FAILED
Total time: 9.907 secs
规则集文件如下所示:
注:本示例是为Gradle 1.10编写的。较新版本的Gradle(约2.0)使用较新版本的PMD;因此,许多规则集
路径发生了变化。例如,rulesets/logging java.xml
现在可以在rulesets/java/logging java.xml
中找到
我意识到这是一个巨大的编辑,但它本质上是一个不同的答案。因此,在与您交谈并玩转它之后,我确定Gradle插件使用的pmd库版本比发布的版本稍旧(即4.3版);但是,插件中缺少一些规则集,因为最新的pmd版本是5.0.5,它与Gradle和Java的
NullPointerException
冲突。现在,在编写了可能是我一生中语法最正确、最费劲的Hello World Java程序来测试所有这些之后,我已经编译了目前使用Gradle插件的每一个Java规则集:
下面是Main.java:
package william;
import java.util.logging.Logger;
public final class Main{
private Main(){}
public static void main(final String [ ] args){
final Logger log = Logger.getLogger(Main.class.getName());
log.fine("Hello World");
}
}
这是build.gradle:
apply plugin: 'java'
apply plugin: 'pmd'
pmd {
ruleSets = [
"basic",
"braces",
"naming",
"android",
"clone",
"codesize",
"controversial",
"design",
"finalizers",
"imports",
"j2ee",
"javabeans",
"junit",
"logging-jakarta-commons",
"logging-java",
"migrating",
"optimizations",
"strictexception",
"strings",
"sunsecure",
"typeresolution",
"unusedcode"
]
}
repositories {
mavenCentral()
}
现在您可能想知道,哪些规则集还不受支持?答案是:
“评论”
“空的”
“不必要的”
祝你好运,我会在gradle论坛上提出缺少规则集的问题,请求添加这些规则集,或者更新版本。或者,如果您真的非常需要缺少的规则集,您可以自定义编译插件并将其链接到较新的pmd版本 使用kuporific描述的自己的rulset.xml文件时,如:
pmd {
ruleSetFiles = files('path/to/ruleSet.xml')
}
Gradle1.10使用某种默认规则。是的,如果文件路径错误,它会抱怨;如果内容无效,它会抱怨。但在检查期间,将应用一些默认规则集。所以我有点惊讶这对你有用
另见:
解决方法不是使用规则集文件,而是逐个引用它们:
ruleSets = [ "$projectRoot/buildtools/pmd-rules/strings.xml"]
在这里添加其他优秀答案。将pmd应用于gradle构建并通过
gradle pmdMain
调用它后,pmd jar将下载到gradle缓存中。从那里您可以运行:
find ~/.gradle -name "*pmd*.jar" -exec jar -tvf {} \;|grep rulesets
您将获得以下输出:
0 Thu Nov 10 20:48:06 EST 2011 rulesets/
0 Thu Nov 10 20:48:06 EST 2011 rulesets/internal/
0 Thu Nov 10 20:48:06 EST 2011 rulesets/releases/
18068 Thu Nov 10 20:48:06 EST 2011 rulesets/naming.xml
65 Thu Nov 10 20:48:06 EST 2011 rulesets/jsprulesets.properties
710 Thu Nov 10 20:48:06 EST 2011 rulesets/migrating_to_15.xml
483 Thu Nov 10 20:48:06 EST 2011 rulesets/migrating_to_14.xml
1048 Thu Nov 10 20:48:06 EST 2011 rulesets/rulesets.properties
3017 Thu Nov 10 20:48:06 EST 2011 rulesets/javabeans.xml
2089 Thu Nov 10 20:48:06 EST 2011 rulesets/sunsecure.xml
777 Thu Nov 10 20:48:06 EST 2011 rulesets/migrating_to_junit4.xml
3198 Thu Nov 10 20:48:06 EST 2011 rulesets/scratchpad.xml
13190 Thu Nov 10 20:48:06 EST 2011 rulesets/strings.xml
1379 Thu Nov 10 20:48:06 EST 2011 rulesets/internal/all-java.xml
2639 Thu Nov 10 20:48:06 EST 2011 rulesets/internal/dogfood.xml
6036 Thu Nov 10 20:48:06 EST 2011 rulesets/finalizers.xml
5347 Thu Nov 10 20:48:06 EST 2011 rulesets/logging-jakarta-commons.xml
13629 Thu Nov 10 20:48:06 EST 2011 rulesets/migrating.xml
610 Thu Nov 10 20:48:06 EST 2011 rulesets/migrating_to_13.xml
3593 Thu Nov 10 20:48:06 EST 2011 rulesets/braces.xml
4163 Thu Nov 10 20:48:06 EST 2011 rulesets/clone.xml
702 Thu Nov 10 20:48:06 EST 2011 rulesets/releases/33.xml
1332 Thu Nov 10 20:48:06 EST 2011 rulesets/releases/41.xml
1009 Thu Nov 10 20:48:06 EST 2011 rulesets/releases/35.xml
395 Thu Nov 10 20:48:06 EST 2011 rulesets/releases/43.xml
1340 Thu Nov 10 20:48:06 EST 2011 rulesets/releases/40rc1.xml
1110 Thu Nov 10 20:48:06 EST 2011 rulesets/releases/34.xml
537 Thu Nov 10 20:48:06 EST 2011 rulesets/releases/38.xml
346 Thu Nov 10 20:48:06 EST 2011 rulesets/releases/37-jsp.xml
393 Thu Nov 10 20:48:06 EST 2011 rulesets/releases/37.xml
744 Thu Nov 10 20:48:06 EST 2011 rulesets/releases/39.xml
1066 Thu Nov 10 20:48:06 EST 2011 rulesets/releases/36.xml
1256 Thu Nov 10 20:48:06 EST 2011 rulesets/releases/42.xml
6379 Thu Nov 10 20:48:06 EST 2011 rulesets/android.xml
4967 Thu Nov 10 20:48:06 EST 2011 rulesets/logging-java.xml
11557 Thu Nov 10 20:48:06 EST 2011 rulesets/j2ee.xml
52926 Thu Nov 10 20:48:06 EST 2011 rulesets/design.xml
9216 Thu Nov 10 20:48:06 EST 2011 rulesets/basic-jsp.xml
37773 Thu Nov 10 20:48:06 EST 2011 rulesets/basic.xml
3981 Thu Nov 10 20:48:06 EST 2011 rulesets/imports.xml
3836 Thu Nov 10 20:48:06 EST 2011 rulesets/typeresolution.xml
2755 Thu Nov 10 20:48:06 EST 2011 rulesets/unusedcode.xml
25043 Thu Nov 10 20:48:06 EST 2011 rulesets/controversial.xml
3045 Thu Nov 10 20:48:06 EST 2011 rulesets/coupling.xml
13379 Thu Nov 10 20:48:06 EST 2011 rulesets/strictexception.xml
12787 Thu Nov 10 20:48:06 EST 2011 rulesets/codesize.xml
12484 Thu Nov 10 20:48:06 EST 2011 rulesets/junit.xml
10784 Thu Nov 10 20:48:06 EST 2011 rulesets/optimizations.xml
1412 Thu Nov 10 20:48:06 EST 2011 rulesets/basic-jsf.xml
1396 Thu Nov 10 20:48:06 EST 2011 rulesets/favorites.xml
这些可能不会全部实施,但这是一个很好的起点。有关每个文件的说明,您可以查看文档。gradle支持最新版本的
PMD
(5.1.3
,在编写此答案时)。规则集需要以java-
我用gradle-1.12
要在gradle中使用PMD 5.1.3
,以下配置定义了我可以找到的所有可能的规则集:
pmd {
toolVersion = '5.1.3'
ruleSets = [
'java-android',
'java-basic',
'java-braces',
'java-clone',
'java-codesize',
'java-comments',
'java-controversial',
'java-coupling',
'java-design',
'java-empty',
'java-finalizers',
'java-imports',
'java-j2ee',
'java-javabeans',
'java-junit',
'java-logging-jakarta-commons',
'java-logging-java',
'java-migrating',
'java-naming',
'java-optimizations',
'java-strictexception',
'java-strings',
'java-sunsecure',
'java-typeresolution',
'java-unnecessary',
'java-unusedcode'
]
}
参考:显然这是一个插件版本问题。哎哟。也许有一种方法可以使用toolVersion子命令来解决这个问题,但是插件坏了,抛出了5.0.5(最新)版本的空指针,不确定到底是怎么回事。也许给pmd的人留个口信。还有,我要删除旧的评论,我要清理一下,很好!非常彻底。谢谢你的帮助。(完全改变你的答案绝对没有错。)对不起,我不明白。Gradle说
规则集文件
用于“自定义规则集文件”,而规则集
用于“内置规则集”。在您链接到的问题中,它们似乎有自定义pmd规则集(在“$projectRoot/buildtools/pmd rules/”中,该目录不是内置的Gradle目录)。论坛建议,这从1.4中断到1.5-rc-1,但已在1.5-rc-2中修复。临时解决方法是设置规则集
,而不是规则集文件
。您能描述一下如何重现您看到的问题吗?我们有一个“自定义规则集文件”,我想从规则中排除。我把它写进了文件,但没有效果。当通过ant运行pmd时,它会这样做。当运行gradle时,pmd配置为“ruleSets=filepath”,如上所示,它也可以工作。有点奇怪,它似乎对你有用。我用jdk8,gradle 1.10在windows7上运行这个程序。我还没能重现你的问题,但我真的很好奇。你能为它提出一个问题吗?我认为这是值得深入研究的。它可能真的依赖于系统。。?我想我必须创建一个简单的示例项目设置来进一步研究。一旦我有空闲时间,我可能会那样做。谢谢