2012-12-14 42 views
7

我在我的java 項目使用的Maven 3的Checkstyle 2.9.1,我有我們使用在其他幾個項目,以及一個共同CheckStyle的配置。爲避免將配置文件複製並編輯到我自己的項目中,我使用抑制文件來禁用某些程序包(生成的代碼)中的所有檢查。什麼是禁止某些文件的特定checkstyle規則的正確語法?

現在我想壓制所有文件中的特定規則。

這是我的鎮壓文件:

<?xml version="1.0"?> 
<!DOCTYPE suppressions PUBLIC "-//Puppy Crawl//DTD Suppressions 1.1//EN" "http://www.puppycrawl.com/dtds/suppressions_1_1.dtd"> 
<suppressions> 
    <suppress files="my[\\/]generated[\\/]code[\\/]package" checks="."/> 
    <suppress files=".*\\.java$" checks="IndentationCheck"/> 
    <suppress files=".*\\.java$" checks="LineLengthCheck"/> 
    <suppress files=".*\\.java$" checks="ExplicitInitializationCheck"/> 
    <suppress files=".*\\.java$" checks="MemberNameCheck"/> 
</suppressions> 

這是我的POM:

... 
<build> 
    ... 
    <plugins> 
    ... 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-checkstyle-plugin</artifactId> 
      <version>2.9.1</version> 
      <configuration> 
       <configLocation>${checkstyle.ruleset}</configLocation> 
       <suppressionsLocation>${checkstyle.suppressions}</suppressionsLocation> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

然後我打電話

mvn checkstyle:checkstyle 

來生成報告,但抑制警告仍然存在。

我在這裏做錯了什麼?

回答

10

好吧,我終於成功地爲我的checkstyle配置建立一個工作抑制文件。

原來的問題是用正則表達式,所以不是files=".*\\.java$"我現在使用files="."抑制對所有文件的特殊檢查。我也禁止在某些文件上的所有檢查。

下面是我的鎮壓一些例子文件:

<?xml version="1.0"?> suppressions PUBLIC "-//Puppy Crawl//DTD Suppressions 1.1//EN" "http://www.puppycrawl.com/dtds/suppressions_1_1.dtd"> 
<suppressions> 
    <!-- suppress certain checks on all files in a package --> 
    <suppress files="my[\\/]super[\\/]package[\\/]name" checks="ModifierOrderCheck|NeedBracesCheck|MagicNumberCheck"/> 
    <!-- suppress all checks on all files in a package --> 
    <suppress files="another[\\/]super[\\/]package[\\/]of[\\/]mine" checks=".*"/> 
    <!-- suppress certain checks on all files --> 
    <suppress files="." checks="IndentationCheck"/> 
    <suppress files="." checks="LineLengthCheck"/> 
    <suppress files="." checks="ExplicitInitializationCheck"/> 
    <suppress files="." checks="MemberNameCheck"/> 
    <suppress files="." checks="FinalClassCheck"/> 
</suppressions> 

如果您需要配置的Maven的部分幫助,請參閱@Mawia的answer

0

這對我有效。

而不是做

<suppressionsLocation>${checkstyle.suppressions}</suppressionsLocation> 

的,我把這個在$ {} checkstyle.ruleset(我以爲是檢查的風格XML文件)

<module name="SuppressionFilter"> 
    <property name="file" value="${checkstyle.suppressions}" /> 
</module> 

而我的$ {checkstyle.suppressions }有

<suppressions> 
    <suppress files="package-info.java" checks="[a-zA-Z0-9]*"/> 
    <suppress files="SomeClass.java" checks="[a-zA-Z0-9]*"/> 
</suppressions> 
+0

那麼,抑制文件被識別和使用。但是實際的抑制不起作用。我找到了解決方案,但今天沒有與我的源代碼。我會在星期一更新我的問題。 – cringe

+0

$ {checkstyle.ruleset}和$ {checkstyle.suppressions}這兩個是什麼? – user1730789

相關問題