2014-04-23 42 views
5

我目前正在將我的應用程序項目從基於Ant的Eclipse遷移到基於Gradle的Android Studio。 我的eclipse項目具有配置爲自定義的自定義Checkstyle檢查,然後將自定義程序包包含在Checkstyle配置XML中。 我正面臨將此自定義檢查遷移到Android Studio的問題。不知道我在哪裏可以指示gradle來選擇這個自定義軟件包。 在這個問題上困住了幾天吧!任何幫助,非常感謝......使用Gradle進行Checkstyle自定義檢查(android studio)

目前運行到TreeWalker錯誤,無法實例化定製包:

[錯誤]

Unable to create a Checker: cannot initialize module TreeWalker - Unable to instantiate jp.myproject.tools.checkstyle.checks.naming.MemberNameCheck 

[CheckStyle的-packages.xml]

<?xml version="1.0" encoding="UTF-8"?> 

<!DOCTYPE checkstyle-packages PUBLIC 
"-//Puppy Crawl//DTD Package Names 1.0//EN" 
"http://www.puppycrawl.com/dtds/packages_1_0.dtd"> 

<checkstyle-packages> 
    <package name="jp.myproject.tools.checkstyle.checks.naming" /> 
</checkstyle-packages> 

[Checkstyle config文件]

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN" "http://www.puppycrawl.com/dtds/configuration_1_3.dtd"> 

<!-- 
    This configuration file was written by the eclipse-cs plugin configuration editor 
--> 
<!-- 
    Checkstyle-Configuration: myproject android checks 
    Description: none 
--> 
<module name="Checker"> 
    <property name="severity" value="warning"/> 
    <property name="charset" value="UTF-8" /> 
    <module name="TreeWalker"> 
    <property name="tabWidth" value="4"/> 
    <module name="FileContentsHolder"/> 
    <module name="CyclomaticComplexity"> 
     <property name="severity" value="info"/> 
     <property name="max" value="15"/> 
    </module> 
    <module name="NPathComplexity"> 
     <property name="severity" value="info"/> 
     <property name="max" value="200"/> 
    </module> 
    <module name="JavadocMethod"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="JavadocType"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="JavadocVariable"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="JavadocStyle"> 
     <property name="severity" value="ignore"/> 
     <property name="endOfSentenceFormat" value="([。.?!][ \t\n\r\f&lt;])|([。.?!]$)"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="AbstractClassName"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="ClassTypeParameterName"> 
     <property name="format" value="^[A-Z][a-zA-Z]*$"/> 
    </module> 
    <module name="ConstantName"> 
     <property name="format" value="^[A-Z_][A-Z0-9_]*(_[A-Z0-9]+)*$"/> 
    </module> 
    <module name="LocalFinalVariableName"/> 
    <module name="LocalVariableName"/> 
    <module name="MemberName"> 
     <property name="applyToProtected" value="false"/> 
     <property name="applyToPackage" value="false"/> 
     <property name="applyToPrivate" value="false"/> 
     <property name="format" value="^[a-zA-Z0-9]*$"/> 
    </module> 
    <module name="jp.myproject.tools.checkstyle.checks.naming.MemberNameCheck"> 
     <property name="applyToPublic" value="false"/> 
     <property name="applyToNestedClassMember" value="false"/> 
     <property name="format" value="^m[A-Z][a-zA-Z0-9]+$"/> 
    </module> 
    <module name="MethodName"/> 
    <module name="MethodTypeParameterName"/> 
    <module name="PackageName"/> 
    <module name="ParameterName"/> 
    <module name="StaticVariableName"/> 
    <module name="TypeName"/> 
    <module name="AvoidStarImport"> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="IllegalImport"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="RedundantImport"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="UnusedImports"> 
     <property name="processJavadoc" value="true"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="LineLength"> 
     <property name="severity" value="ignore"/> 
     <property name="max" value="100"/> 
     <property name="tabWidth" value="4"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="MethodLength"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="ParameterNumber"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="EmptyForIteratorPad"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="GenericWhitespace"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="MethodParamPad"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="NoWhitespaceAfter"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="NoWhitespaceBefore"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="OperatorWrap"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="ParenPad"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="TypecastParenPad"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="WhitespaceAfter"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="WhitespaceAround"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="ModifierOrder"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="RedundantModifier"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="AvoidNestedBlocks"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="EmptyBlock"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="LeftCurly"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="NeedBraces"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="RightCurly"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="DoubleCheckedLocking"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="EmptyStatement"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="EqualsHashCode"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="HiddenField"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="IllegalInstantiation"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="InnerAssignment"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="MagicNumber"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="MissingSwitchDefault"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="RedundantThrows"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="SimplifyBooleanExpression"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="SimplifyBooleanReturn"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="DesignForExtension"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="FinalClass"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="HideUtilityClassConstructor"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="InterfaceIsType"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="VisibilityModifier"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="ArrayTypeStyle"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="FinalParameters"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="TodoComment"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="UpperEll"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="AnnotationUseStyle"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="MissingDeprecated"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="MissingOverride"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="PackageAnnotation"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="SuppressWarnings"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="StringLiteralEquality"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="ArrayTrailingComma"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="UnnecessaryParentheses"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="OneStatementPerLine"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="ParameterAssignment"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="PackageDeclaration"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="NoFinalizer"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="NestedTryDepth"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="DefaultComesLast"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="GenericWhitespace"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="EmptyForInitializerPad"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="DeclarationOrder"> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    </module> 
    <module name="NewlineAtEndOfFile"> 
    <property name="severity" value="ignore"/> 
    <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="Translation"> 
    <property name="severity" value="ignore"/> 
    <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="FileLength"> 
    <property name="severity" value="ignore"/> 
    <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="FileTabCharacter"/> 
    <module name="JavadocPackage"> 
    <property name="severity" value="ignore"/> 
    <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="RegexpSingleline"> 
    <property name="severity" value="ignore"/> 
    <property name="format" value="\s+$"/> 
    <property name="message" value="Line has trailing spaces."/> 
    <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 
    <module name="SuppressionCommentFilter"/> 
    <module name="SuppressWithNearbyCommentFilter"> 
    <property name="commentFormat" value="CHECKSTYLE IGNORE THIS LINE"/> 
    <property name="checkFormat" value=".*"/> 
    <property name="influenceFormat" value="0"/> 
    </module> 
    <module name="StrictDuplicateCode"> 
     <property name="severity" value="info"/> 
    </module> 
</module> 
+0

你的'build.gradle'是什麼?你可以得到一個想法如何從這個項目運行checkstyle:https://github.com/stephanenicolas/Quality-Tools-for-Android/blob/master/build.gradle –

+0

好checkstyle這樣工作正常,沒有自定義checkstyle包。我已經根據這個項目配置了checkstyle [https://github.com/marcoRS/volley-examples]。當我嘗試添加自定義checkstyle包時出現錯誤 – Vishy

+0

您使用的是哪種Checkstyle版本的螞蟻?因爲'-n packageNamesFile'選項已被刪除,因爲Checkstyle 5.0。 Gradle插件使用Checkstyle 5.6。你應該把'checkstyle-packages.xml'放在你的jar的根目錄下,並使用自定義檢查,如文檔所述:http://checkstyle.sourceforge.net/config.html#Packages或更新checkstyle配置文件以使用完整軟件包名稱進行自定義檢查。 –

回答

1

假設你使用的是標準的gradle產出的CheckStyle插件,您只需要添加

dependencies { 
    checkstyle 'custom:checkstyle:0.01' //Replace this with a dependency on your custom checkstyle code. 
} 

這將延長的CheckStyle插件的類路徑,包括你的額外軟件包。

如果您沒有內部maven/ivy回購代碼,您可能需要查看dependency documentation以瞭解如何指定文件或項目依賴關係。

+0

對不起,但這不適合我!我嘗試了很多模式來添加依賴,比如「checkstyle fileTree(dir:'src',include:'*。java')」等,但是它的gradle無法識別自定義Check } – Vishy

+2

將源文件添加到classpath中做任何有用的事情。你需要在checkstyle的classpath上編譯代碼。 如果您的checkstyle擴展也位於同一個源代碼樹中,您應該可以將'tasks.withType(Checkstyle){checkstyleClasspath + = checkstyleMain.classpath}'添加到您的構建文件中,並刪除以前有關添加依賴性塊的建議。 這會將主源集中的代碼添加到checkstyles運行時類路徑中。 – devmop

相關問題