Gradle 的 PMD 插件:什么是可接受的参数?

2024-03-27

  • Java 1.7.0_40
  • 摇篮1.10

我从未使用过 Gradle 的 PMD 插件,并且在尝试将规则集添加到我的项目时遇到了麻烦build.gradle. The Pmd 文档 http://www.gradle.org/docs/current/dsl/org.gradle.api.plugins.quality.Pmd.html不清楚什么是有效值ruleSets是。他们的例子是ruleSets = ["basic", "braces"]他们链接到“官方名单” http://pmd.sourceforge.net/pmd-5.0.5/rules/index.html。不幸的是,没有什么可继续的。

我猜测部分标题以某种方式映射到有效字符串?喜欢,

  • “基本(java)” http://pmd.sourceforge.net/pmd-5.0.5/rules/index.html#Basic->“基本”
  • “大括号(java)” http://pmd.sourceforge.net/pmd-5.0.5/rules/index.html#Braces_java->“大括号”

但是像这样的事情呢?“空代码(java)” http://pmd.sourceforge.net/pmd-5.0.5/rules/index.html#Empty_Code?

这是一个工作build.gradle例子:

apply plugin: 'java'
apply plugin: 'pmd'

pmd {
    ruleSets = [
            // The first two better work since it's right in the Javadoc...
            "basic",
            "braces",
            // This one does not work and other variations like 
            // "empty code", "emptycode", "empty-code", "empty_code" do not work.
            "emptyCode"
    ]
}
repositories {
    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
  

跑步与--stacktrace or --debug按照建议似乎没有产生任何有用的东西......

注意:创建一个虚拟文件,例如src/main/java/Dummy.java。否则,构建will成功。

How are ruleSets supposed被宣布?


Edit:

最终声明变得更容易xml规则集,因为它提供了对规则的细粒度控制。它包含在build.gradle像这样:

apply plugin: 'pmd'

pmd {
    ruleSetFiles = files('path/to/ruleSet.xml')
}

规则集文件看起来像这样:

注意:此示例是为 Gradle 1.10 编写的。较新版本的 Gradle(大约 2.0)使用较新版本的 PMD;因此,许多rulesets路径改变了。所以rulesets/logging-java.xml现在发现于rulesets/java/logging-java.xml, 例如。

<?xml version="1.0" encoding="UTF-8"?>
<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    name="Android Application Rules"
    xmlns="http://pmd.sf.net/ruleset/1.0.0"
    xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd"
    xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 
                        http://pmd.sf.net/ruleset_xml_schema.xsd" >

    <rule ref="rulesets/logging-java.xml" />
    <rule ref="rulesets/basic.xml" />
    <rule ref="rulesets/braces.xml" />
    <rule ref="rulesets/codesize.xml" >
        <exclude name="TooManyMethods" />
    </rule>
    <rule ref="rulesets/controversial.xml">
        <exclude name="UseConcurrentHashMap" />
        <exclude name="AvoidLiteralsInIfCondition" />
        <exclude name="DataflowAnomalyAnalysis" />
        <exclude name="CallSuperInConstructor" />
        <exclude name="AtLeastOneConstructor" />
        <exclude name="NullAssignment" />
    </rule>
    <!-- etc... -->
</ruleset>

最新版本PMD (5.1.3当写这个答案时)是由 gradle 支持的。规则集需要以前缀java-

我测试了这个gradle-1.12

To use PMD 5.1.3使用 gradle,以下配置定义了我能找到的所有可能的规则集:

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'
            ]
}

参考: http://forums.gradle.org/gradle/topics/_pmdtest_fails_with_cant_find_resource_null_when_rulesets_include_braces_gradle_2_0_rc_1 http://forums.gradle.org/gradle/topics/_pmdtest_fails_with_cant_find_resource_null_when_rulesets_include_braces_gradle_2_0_rc_1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gradle 的 PMD 插件:什么是可接受的参数? 的相关文章

随机推荐

  • Analysis_options.yaml 中包含多个内容?

    我想组合两个 或更多 analysis options yaml我的项目的文件 但无法找到如何做到这一点的方法 这有效 include package pedantic analysis options yaml 这也有效 include
  • 错误:‘.’令牌之前需要有不合格的 id //(结构)

    我需要制作一个程序 从用户那里获取一小部分 然后对其进行简化 我知道如何做到这一点 并且已经完成了大部分代码 但我不断收到此错误 错误 令牌之前预期有不合格的 id 我已经声明了一个名为 ReducedForm 的结构 它包含简化的分子和分
  • Python,Matplotlib,散点图,更改单击点的颜色

    我有一个带有选择器事件的简单散点图 我想更改用鼠标单击的数据点的颜色 我的代码将改变整个数组的颜色 我怎样才能改变一个特定的点 import sys import numpy as np import matplotlib pyplot a
  • 匹配集的数据结构

    我有一个应用程序 其中有很多组 一套可能是 4 7 12 18 唯一编号且全部小于 50 然后我有几个数据项 1 1 2 4 7 8 12 18 23 29 2 3 4 6 7 15 23 34 38 3 4 7 12 18 4 1 4 7
  • 二叉搜索树验证的空间复杂度

    验证二叉树是否为 BST 的最佳算法如下 IsValidBST root infinity infinity bool IsValidBST BinaryNode node int MIN int MAX if node null retu
  • 检查包含数十万张图像的目录中损坏的文件的速度逐渐变慢

    所以我有 600 000 多张图像 我估计其中大约 5 10 已损坏 我正在生成一个日志 准确记录与该图像相关的图像 使用Python 到目前为止我的方法是这样的 def img validator source files get pat
  • Android 4.1.2 对话框被调用两次

    当我调用显示对话框时 我的应用程序遇到了这个问题 不知何故它被调用了两次 这只发生在 android 4 1 及以上版本 较低版本工作正常 所以我不认为这是任何代码问题 您以前听说过 遇到过这个问题吗 这里是代码 Button edit B
  • 使用 AVAssetReader 读取视频文件时由于内存利用率高而导致应用程序崩溃

    我正在尝试使用此问题中接受的答案中的方法来读取视频帧 使用 AVPlayer 访问单个帧 https stackoverflow com questions 39570745 accesing individual frames using
  • 从 boost::shared_ptr 转换为 std::shared_ptr?

    我有一个内部使用 Boost 版本的库shared ptr并且只暴露那些 对于我的应用程序 我想使用std shared ptr只要有可能 遗憾的是 这两种类型之间没有直接转换 因为引用计数的内容取决于实现 有什么办法可以同时拥有boost
  • 我可以在 Rails 模型中定义方法吗?

    我的 Rails 模型的代码试图define method method name 模型内部 我不断得到 NoMethodError undefined method define method 我究竟做错了什么 我这样做是不是在错误的地方
  • 找不到 web api 路由属性

    我需要在我的 Web 服务中实现一个方法 该方法可通过定义的路线使用 所以我用了Route像这样的属性 Route api New public void CreateNew int id Do stuff 但是VS2013说找不到命名空间
  • Sidekiq 服务器未加载配置文件

    我正在尝试使用 sinatra 应用程序设置 sidekiq 并且我有 使用配置文件启动 sidekiq 工作程序以在守护程序模式下运行时遇到问题 我的项目具有以下结构 project config sidekiq yml Sidekiq
  • 如何在jquery中从右到左切换div

    我有这个小提琴 我试图创建一个浮动 div 它应该从右到左切换 我对 UI 很陌生 所以我的代码有点混乱 这是我的代码和FIddle https jsfiddle net KFmLv 6752 widget toggle btn click
  • Room :来自 Dao 的 LiveData 将在每次更新时触发 Observer.onChanged,即使 LiveData 值没有变化

    我发现只要数据库中的行被更新 Dao 返回的 LiveData 就会调用它的观察者 即使 LiveData 值显然没有改变 考虑如下例所示的情况 示例实体 Entity public class User public long id pu
  • 防止控件在禁用时变灰

    在 winforms net 控件中 如果我们将 Enabled 属性设置为 false 则控件将变灰 在这种情况下 许多颜色组合将变得不可读 因为我提供了在运行时为用户更改表单颜色的选项 我可以使用 ReadOnly 属性 但它仅适用于
  • 如何将覆盖视图放在操作栏 Sherlock 上

    我想在操作栏上设置一些视图来显示教程文本 例如单击此处并发送电子邮件 这可能吗 我问是因为我知道操作栏使用布局上的顶部空间 而片段或活动使用剩余空间 我的第二个问题是如何在操作栏上显示所有操作项 我使用 ActionBarSherlock
  • Word 2011 VBA 中的文件对话框

    我希望能进行一些健全性检查 我正在为 Mac 改编一个 Word 加载项 用 VBA 为 Word 2010 编写 具体来说 此时为 Word 2011 我知道其中的许多差异 但我无法找到其中的差异很多文档都明显缺乏 FileDialog
  • 正则表达式匹配最多 9 位的整数

    我想创建一个正则表达式 其中只允许数字 最大长度为 9 没有最小长度 我想出了 d 9 0 9 但它不起作用 你很接近了 尝试这个 d 0 9 和 分别匹配文本的开头和结尾 d 0 9 匹配字符串中的任何位置 所以d0000会通过 因为它会
  • Sql Query帮助从两个表中获取不匹配的记录

    我正在尝试从 2 个表中获取不匹配的记录 For ex TableA ID Account 1 Acc1 2 Acc2 3 Acc3 TableB Opp Accountid Opp1 1 Opp2 2 Opp3 4 我需要知道哪个 acc
  • Gradle 的 PMD 插件:什么是可接受的参数?

    Java 1 7 0 40 摇篮1 10 我从未使用过 Gradle 的 PMD 插件 并且在尝试将规则集添加到我的项目时遇到了麻烦build gradle The Pmd 文档 http www gradle org docs curre