http://maven.apache.org/plugins/maven-pmd-plugin/目前是 2.4 版,支持 PMD 4.2.2 版
是否可以将 PMD 版本 4.2.5 与此插件一起使用,如果可以,我们该怎么做?
我有一段用于流复制的代码。
OutputStream os = ...;
InputStream is = ...;
int bufferLength;
byte[] buffer = new byte[1024];
while ((bufferLength = is.read(buffer)) != -1) {
os.write(buffer, 0, bufferLength);
}
Run Code Online (Sandbox Code Playgroud)
如果我在它上面运行 PMD,我会收到以下警告http://pmd.sourceforge.net/rules/controversial.html#AssignmentInOperand。
现在我希望摆脱那个警告,但我能想到的唯一选择是
OutputStream os = ...;
InputStream is = ...;
int bufferLength;
byte[] buffer = new byte[1024];
bufferLength = is.read(buffer);
while (bufferLength != -1) {
os.write(buffer, 0, bufferLength);
bufferLength = is.read(buffer);
}
Run Code Online (Sandbox Code Playgroud)
我真的不喜欢那样,因为我最终会复制代码。有没有更优雅的方式来满足这个 PMD 规则?
我试图运行PMD来自Ant于Eclipse当我生成项目.
这是我的build.xml文件:
<taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask"/>
<target name="check_pmd">
<pmd rulesetfiles="C:\Users\Nikolay\ProjectName\lib\rulesets\java\basic.xml">
<formatter type="html" toFile="pmd_report.html" toConsole="true"/>
<fileset dir="C:\Users\Nikolay\ProjectName\src">
<include name="**/*.java"/>
</fileset>
</pmd>
</target>
Run Code Online (Sandbox Code Playgroud)
它运行良好basic.xml,但我想运行java文件夹中的所有规则集(它有大约20个规则集)所以我尝试过:
<pmd rulesetfiles="C:\Users\Nikolay\ProjectName\lib\rulesets\java\*.xml">
<pmd rulesetfiles="C:\Users\Nikolay\ProjectName\lib\rulesets\java\*">
Run Code Online (Sandbox Code Playgroud)
但是当我试图跑步时,他们都失败了.有没有办法指定文件夹,而不是手动指定文件列表的单个文件?
为了让未来的读者在Eclipse下配置Ant PMD:
pmd-bin.zip从官方网站下载pmd.jar,jaxen.jar然后asm.jarrulesets文件夹<pmd rulesetfiles=...>我正在为一个类安装Eclipse Juno for Java Developers,我们已经被要求安装PMD插件.我们有自己的xml文件和规则,我们必须替换插件的默认规则.当我浏览并选择文件时,导入工具不允许我按"确定".
有什么建议?我对这些东西很新.
PMD和SonarQube是一个不错的工具,但我在尝试抑制PMD警告方面遇到了问题.
我们在项目中经常使用Lombok,因此许多模型类都有:@SuppressWarnings("PMD.UnusedPrivateField")作为类级别的注释.
这很好用.
问题是,如果我不想再忽略一条规则,我会期望以下语法:@SuppressWarnings(value = {"PMD.UnusedPrivateField","PMD.SingularField"})这看起来像正确的语法,也是阅读PMD注释的实现.
但是,这似乎不起作用:现在没有规则被禁止.
我找不到如何告诉PMD-CPD跳过特定方法的选项.我们使用生成equals()和hashCode()方法,因此这些方法看起来非常相似,并且CPD将很多方法报告为重复代码.
我可以//NOPMD在代码中使用一些注释,但在我看来,如何管理我的代码并不是什么方法.因为我在代码中加入了一个与代码无关的工具.CPD有助于避免编码错误/样式,不应强迫我修改我的代码.
如果有人有一些想法如何解决它,那将会非常有用.
最好的祝愿
我的应用程序(在 Gradle 中)中有一些模块(项目和子项目),并且我添加了插件:PMD、checkstyle、findbugs。这些插件在它们的目录中创建自己的报告(例如:PMD 在目录“reports”中创建目录“PMD”并将报告放在那里)。我想要一份关于所有这些插件的报告。有可能这样做吗?如果是,那该怎么做?
我正在尝试缩小 PMD 规则的范围,如何从 PMD 检查中排除所有用 @GET 注释的 REST 方法?
如何避免 Java 代码中的 PMD 错误?
public enum testEnum {
TEST1(1L, "TEST", "random1");
TEST2(2L, "TEST", "random2");
TEST3(3L, "TEST", "random3");
TEST4(4L, "TEST", "random4");
TEST5(5L, "TEST", "random5");
TEST6(6L, "TEST", "random6");
TEST7(7L, "OTHER STRING", "random7");
private Long id;
private String type;
private String text;
private testEnum(Long id, String type, String text){
this.id = id;
this.type = type;
this.text = text;
}
}
Run Code Online (Sandbox Code Playgroud)
运行 PMD 检查时,它会引发以下错误:
字符串文字“TEST”在这个文件中出现了 6 次;第一次出现在第 10 行
有没有办法避免它而不是使用@SuppressWarnings("PMD")?
有没有办法通过类名模式从 PMD 规则中排除类?
我正在寻找诸如此类的东西:
<rule ref="rulesets/java/coupling.xml/ExcessiveImports">
<exclude-pattern>.*Test\.class</exclude-pattern>
</rule>
Run Code Online (Sandbox Code Playgroud)
我知道违反 SuppressXPath 方法,但我觉得它太丑陋/复杂。
谢谢!