3

私は初めてPMD/CPDです。PMD以下のようにMavenプロジェクトで構成しました:

<groupId>org.parent</groupId>
<artifactId>CustRestExampleOsgi</artifactId>
<version>1.0</version>

<packaging>pom</packaging>
<name>CustRestExampleOsgii</name>

<modules>
    <module>CustImplProvider</module>
    <module>CustInterface</module>
    <module>RestCustConsumer</module>
</modules>

<properties>
<karaf.deploy.build.folder>
    G:\apache-karaf-3.0.0.RC1\deploy
</karaf.deploy.build.folder>
</properties>

<reporting>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-pmd-plugin</artifactId>
            <version>3.0</version>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jxr-plugin</artifactId>
            <version>2.3</version>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>2.9.1</version>
        </plugin>
    </plugins>
</reporting>

私のMavenプロジェクトは正常にコンパイルされ、mvn jxr:jxr site. しかし、重複したコードを示す結果が見つかりません。これをテストするために、次のように、コードに意図的に重複コードを導入しました。

@Override
public boolean equals(Object object) {
    // TODO: Warning - this method won't work in the case the id fields are not set
    if (!(object instanceof Address)) {
        return false;
    }
    Address other = (Address) object;
    if ((this.id == null && other.id != null)
      || (this.id != null && !this.id.equals(other.id))) {
        return false;
    }
    if (!(object instanceof Address)) { //Duplicate is here
        return false;
    }
    return true;
}

しかし、常にCPDソースコードに問題が検出されたことはありません。ただし、PMDレポートは正常に検索できます。構成またはルールセットが不足していますか?

助けてください!

4

1 に答える 1

5

最小トークン数を十分に低く設定してください。短い重複コードには、デフォルトの 100 より少ないトークンがあります。

ドキュメントによると、プロパティは と呼ばれminimumTokensます。古いバージョンの Maven PMD プラグインにはプロパティがありましたmaven.pmd.cpd.minimumtokencount。テスト用に 5 に設定します。実際には、デフォルトの 100 が適切な値です。

于 2014-01-30T12:07:19.713 に答える