2013-02-04 165 views
2

经过多年成功使用PMD与Ant,我现在试图没有成功地让PMD在Maven内部工作。为什么PMD在命令行中可以正常工作,但在Maven中无法正常工作?

为了说明我的问题,我创建了一个简单的Maven系统(基于Maven教程“my-app”hello world program)。它的区别仅在于包含的代码行的这应该使用基本规则集触发PMD错误:

Boolean bar = new Boolean("true"); 

当我在命令行运行PMD,在代码中的问题是发现:

run.sh pmd -d src/main/java -f text -R rulesets/java/basic.xml -language java 
maven-pmd-example/src/main/java/com/mycompany/app/App.java:11 Avoid instantiating Boolean objects; reference Boolean.TRUE or Boolean.FALSE or call Boolean.valueOf() instead. 

然而,当我运行从内部Maven的PMD是在代码中的问题不透露:

-> mvn pmd:check 
[INFO] Scanning for projects... 
[INFO]                   
[INFO] ------------------------------------------------------------------------ 
[INFO] Building my-app 1.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] >>> maven-pmd-plugin:2.7.1:check (default-cli) @ my-app >>> 
[INFO] 
[INFO] --- maven-pmd-plugin:2.7.1:pmd (pmd) @ my-app --- 
[WARNING] Unable to locate Source XRef to link to - DISABLED 
[INFO] 
[INFO] <<< maven-pmd-plugin:2.7.1:check (default-cli) @ my-app <<< 
[INFO] 
[INFO] --- maven-pmd-plugin:2.7.1:check (default-cli) @ my-app --- 
[INFO] 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 1.375s 
[INFO] Finished at: Sun Feb 03 15:38:02 HST 2013 
[INFO] Final Memory: 12M/309M 
[INFO] ------------------------------------------------------------------------ 

下面是pom.xml中:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.mycompany.app</groupId> 
    <artifactId>my-app</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>my-app</name> 
    <url>http://maven.apache.org</url> 
    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 

    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-pmd-plugin</artifactId> 
     <version>2.7.1</version> 
     <executions> 
      <execution> 
      <phase>verify</phase> 
      <goals> 
       <goal>check</goal> 
      </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <verbose>true</verbose> 
      <minimumPriority>0</minimumPriority> 
      <rulesets> 
      <ruleset>rulesets/basic.xml</ruleset> 
      </rulesets> 
      <targetJdk>1.6</targetJdk> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jxr-plugin</artifactId> 
     <version>2.3</version> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

我已经上传这个例子系统GitHub的,所以你可以看到整个示例系统(与它的下载/播放,如果你想):

https://github.com/philipmjohnson/maven-pmd-example

+0

顺便说一句,为您提供github上的源代码以获得即时帮助:)您的问题 - 虽然对于问题的长久性,但您在问题主体本身提供了大量细节也很棒。 –

回答

1

这是因为您已设置的minimumPriority设置为0,这将有效地阻止PMD评估任何规则(有关优先级的讨论,请参阅to this SO question)。

有关详细信息,请参阅PMD插件目标文档的refer to this section

我建议修改配置,将minimumPriority设置为2,这样就可以使构建失败BooleanInstantiation

希望这会有所帮助!

相关问题