2017-04-05 6 views
1

다음 프로젝트의 confg/checkstyle 디렉토리에 다음 checkstyle.xml 파일이 있습니다. 나는 gradle (v3.4)을 사용하고 있는데 관련 섹션은 gradle 빌드를 실행할 때 (rootDir이 설정되지 않았을 때)받는 오류 메시지와 함께 아래에 복사됩니다. checkstyle 플러그인에 rootDir을 전달하려면 어떻게해야합니까?intellij에서 gradle로 작업하는 checkstyle을 얻을 수 없습니다

오류

Execution failed for task ':checkstyleMain'. 
> Unable to create a Checker: unable to read /abc/def/ghi/jkl/config/checkstyle/checkstyle.xml - unable to parse configuration stream - Property ${rootDir} has not been set 

build.gradle

apply plugin: 'checkstyle' 

//tried with and without the below 
checkstyle { 
    ignoreFailures = true 
    configFile = file("config/checkstyle/checkstyle.xml") 
} 

checkstyle.xml

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

<!-- 
    Checkstyle configuration that checks the Google coding conventions from Google Java Style 
    that can be found at https://google.github.io/styleguide/javaguide.html. 

    Checkstyle is very configurable. Be sure to read the documentation at 
    http://checkstyle.sf.net (or in your downloaded distribution). 

    To completely disable a check, just comment it out or delete it from the file. 

    Authors: Max Vetrenko, Ruslan Diachenko, Roman Ivanov. 
--> 

<module name = "Checker"> 
    <property name="charset" value="UTF-8"/> 

    <property name="severity" value="error"/> 

    <module name="Header"> 
     <property name="headerFile" value="${rootDir}/checkstyle.license"/> 
     <property name="ignoreLines" value="2"/> 
     <property name="fileExtensions" value="java"/> 
    </module> 

    <property name="fileExtensions" value="java, properties, xml"/> 
    <!-- Checks for whitespace        --> 
    <!-- See http://checkstyle.sf.net/config_whitespace.html --> 
    <module name="FileTabCharacter"> 
     <property name="eachLine" value="true"/> 
    </module> 

    <module name="TreeWalker"> 
     <module name="OuterTypeFilename"/> 
     <module name="IllegalTokenText"> 
      <property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/> 
      <property name="format" value="\\u00(08|09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)"/> 
      <property name="message" value="Avoid using corresponding octal or Unicode escape."/> 
     </module> 
     <module name="AvoidEscapedUnicodeCharacters"> 
      <property name="allowEscapesForControlCharacters" value="true"/> 
      <property name="allowByTailComment" value="true"/> 
      <property name="allowNonPrintableEscapes" value="true"/> 
     </module> 
     <module name="LineLength"> 
      <property name="max" value="100"/> 
      <property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/> 
     </module> 
     <module name="AvoidStarImport"/> 
     <!-- TODO(ejona): Upstream? --> 
     <module name="UnusedImports"/> 
     <module name="OneTopLevelClass"/> 
     <module name="NoLineWrap"/> 
     <module name="EmptyBlock"> 
      <property name="option" value="TEXT"/> 
      <property name="tokens" value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/> 
     </module> 
     <module name="NeedBraces"/> 
     <module name="LeftCurly"> 
      <property name="maxLineLength" value="100"/> 
     </module> 
     <module name="RightCurly"/> 
     <module name="RightCurly"> 
      <property name="option" value="alone"/> 
      <property name="tokens" value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO, STATIC_INIT, INSTANCE_INIT"/> 
     </module> 
     <module name="WhitespaceAround"> 
      <property name="allowEmptyConstructors" value="true"/> 
      <property name="allowEmptyMethods" value="true"/> 
      <property name="allowEmptyTypes" value="true"/> 
      <property name="allowEmptyLoops" value="true"/> 
      <message key="ws.notFollowed" 
        value="WhitespaceAround: ''{0}'' is not followed by whitespace. Empty blocks may only be represented as '{}' when not part of a multi-block statement (4.1.3)"/> 
      <message key="ws.notPreceded" 
        value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/> 
     </module> 
     <module name="OneStatementPerLine"/> 
     <module name="MultipleVariableDeclarations"/> 
     <module name="ArrayTypeStyle"/> 
     <module name="MissingSwitchDefault"/> 
     <module name="FallThrough"/> 
     <module name="UpperEll"/> 
     <module name="ModifierOrder"/> 
     <module name="EmptyLineSeparator"> 
      <property name="allowNoEmptyLineBetweenFields" value="true"/> 
     </module> 
     <module name="SeparatorWrap"> 
      <property name="tokens" value="DOT"/> 
      <property name="option" value="nl"/> 
     </module> 
     <module name="SeparatorWrap"> 
      <property name="tokens" value="COMMA"/> 
      <property name="option" value="EOL"/> 
     </module> 
     <module name="PackageName"> 
      <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/> 
      <message key="name.invalidPattern" 
        value="Package name ''{0}'' must match pattern ''{1}''."/> 
     </module> 
     <module name="TypeName"> 
      <message key="name.invalidPattern" 
        value="Type name ''{0}'' must match pattern ''{1}''."/> 
     </module> 
     <module name="MemberName"> 
      <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/> 
      <message key="name.invalidPattern" 
        value="Member name ''{0}'' must match pattern ''{1}''."/> 
     </module> 
     <module name="ParameterName"> 
      <!-- TODO(ejona): too strict, as one-character parameter names are permitted 
      <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/--> 
      <property name="format" value="^[a-z][a-zA-Z0-9]*$"/> 
      <message key="name.invalidPattern" 
        value="Parameter name ''{0}'' must match pattern ''{1}''."/> 
     </module> 
     <module name="CatchParameterName"> 
      <!-- TODO(ejona): too strict, as one-character parameter names are permitted. 
      <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/--> 
      <property name="format" value="^[a-z][a-zA-Z0-9]*$"/> 
      <message key="name.invalidPattern" 
        value="Catch parameter name ''{0}'' must match pattern ''{1}''."/> 
     </module> 
     <module name="LocalVariableName"> 
      <property name="tokens" value="VARIABLE_DEF"/> 
      <!-- TODO(ejona): too strict, as one-character parameter names are permitted. 
       Add support for Unicode. 
      <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/--> 
      <property name="format" value="^[^A-Z]"/> 
      <property name="allowOneCharVarInForLoop" value="true"/> 
      <message key="name.invalidPattern" 
        value="Local variable name ''{0}'' must match pattern ''{1}''."/> 
     </module> 
     <module name="ClassTypeParameterName"> 
      <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/> 
      <message key="name.invalidPattern" 
        value="Class type name ''{0}'' must match pattern ''{1}''."/> 
     </module> 
     <module name="MethodTypeParameterName"> 
      <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/> 
      <message key="name.invalidPattern" 
        value="Method type name ''{0}'' must match pattern ''{1}''."/> 
     </module> 
     <module name="InterfaceTypeParameterName"> 
      <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/> 
      <message key="name.invalidPattern" 
        value="Interface type name ''{0}'' must match pattern ''{1}''."/> 
     </module> 
     <module name="NoFinalizer"/> 
     <module name="GenericWhitespace"> 
      <message key="ws.followed" 
        value="GenericWhitespace ''{0}'' is followed by whitespace."/> 
      <message key="ws.preceded" 
        value="GenericWhitespace ''{0}'' is preceded with whitespace."/> 
      <message key="ws.illegalFollow" 
        value="GenericWhitespace ''{0}'' should followed by whitespace."/> 
      <message key="ws.notPreceded" 
        value="GenericWhitespace ''{0}'' is not preceded with whitespace."/> 
     </module> 
     <module name="Indentation"> 
      <property name="basicOffset" value="2"/> 
      <property name="braceAdjustment" value="0"/> 
      <property name="caseIndent" value="2"/> 
      <property name="throwsIndent" value="4"/> 
      <property name="lineWrappingIndentation" value="4"/> 
      <property name="arrayInitIndent" value="2"/> 
     </module> 
     <module name="AbbreviationAsWordInName"> 
      <property name="ignoreFinal" value="false"/> 
      <property name="allowedAbbreviationLength" value="1"/> 
     </module> 
     <module name="OverloadMethodsDeclarationOrder"/> 
     <!-- TODO(ejona): Does not consider assignment during declaration as a usage. 
     <module name="VariableDeclarationUsageDistance"/--> 
     <module name="CustomImportOrder"> 
      <property name="specialImportsRegExp" value="com.google"/> 
      <property name="sortImportsInGroupAlphabetically" value="true"/> 
      <property name="customImportOrderRules" value="STATIC###SPECIAL_IMPORTS###THIRD_PARTY_PACKAGE###STANDARD_JAVA_PACKAGE"/> 
     </module> 
     <module name="MethodParamPad"/> 
     <module name="OperatorWrap"> 
      <property name="option" value="NL"/> 
      <property name="tokens" value="BAND, BOR, BSR, BXOR, DIV, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR, LT, MINUS, MOD, NOT_EQUAL, PLUS, QUESTION, SL, SR, STAR "/> 
     </module> 
     <module name="AnnotationLocation"> 
      <property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF"/> 
     </module> 
     <module name="AnnotationLocation"> 
      <property name="tokens" value="VARIABLE_DEF"/> 
      <property name="allowSamelineMultipleAnnotations" value="true"/> 
     </module> 
     <module name="NonEmptyAtclauseDescription"/> 
     <module name="JavadocTagContinuationIndentation"/> 
     <module name="SummaryJavadoc"> 
      <property name="forbiddenSummaryFragments" value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}](is a)"/> 
     </module> 
     <module name="JavadocParagraph"/> 
     <module name="AtclauseOrder"> 
      <property name="tagOrder" value="@param, @return, @throws, @deprecated"/> 
      <property name="target" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/> 
     </module> 
     <module name="JavadocMethod"> 
      <property name="scope" value="public"/> 
      <property name="allowMissingParamTags" value="true"/> 
      <property name="allowMissingThrowsTags" value="true"/> 
      <property name="allowMissingReturnTag" value="true"/> 
      <property name="minLineCount" value="2"/> 
      <!-- TOOD(ejona): Too restrictive for tests 
      <property name="allowedAnnotations" value="Override, Test"/--> 
      <property name="allowedAnnotations" value="Override, Test, Before, After, BeforeClass, AfterClass, Setup, TearDown"/> 
      <property name="allowThrowsTagsForSubclasses" value="true"/> 
     </module> 
     <module name="MethodName"> 
      <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9_]*$"/> 
      <message key="name.invalidPattern" 
        value="Method name ''{0}'' must match pattern ''{1}''."/> 
     </module> 
     <module name="SingleLineJavadoc"> 
      <!-- TODO(ejona): Based on mis-reading of style; consider upstreaming 
      <property name="ignoreInlineTags" value="false"/--> 
     </module> 
     <module name="EmptyCatchBlock"> 
      <property name="exceptionVariableName" value="expected"/> 
     </module> 
     <module name="CommentsIndentation"/> 
    </module> 
</module> 

답변

2

단순히 REPLAC checkstyle.xml 파일 (xml 파일에서 rootDir을 사용할 필요가 없음) gradle 빌드를 실행하면 checkstyle이 제대로 작동합니다.

<?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 is a checkstyle configuration file. For descriptions of 
what the following rules do, please see the checkstyle configuration 
page at http://checkstyle.sourceforge.net/config.html --> 

<module name="Checker"> 

    <module name="FileTabCharacter"> 
    <!-- Checks that there are no tab characters in the file. 
    --> 
    </module> 

    <module name="NewlineAtEndOfFile"> 
    <property name="lineSeparator" value="lf"/> 
    </module> 

    <module name="RegexpSingleline"> 
    <!-- Checks that FIXME is not used in comments. TODO is preferred. 
    --> 
    <property name="format" value="((//.*)|(\*.*))FIXME" /> 
    <property name="message" value='TODO is preferred to FIXME. e.g. "TODO(johndoe): Refactor when v2 is released."' /> 
    </module> 

    <module name="RegexpSingleline"> 
    <!-- Checks that TODOs are named. (Actually, just that they are followed 
     by an open paren.) 
    --> 
    <property name="format" value="((//.*)|(\*.*))TODO[^(]" /> 
    <property name="message" value='All TODOs should be named. e.g. "TODO(johndoe): Refactor when v2 is released."' /> 
    </module> 

    <module name="JavadocPackage"> 
    <!-- Checks that each Java package has a Javadoc file used for commenting. 
     Only allows a package-info.java, not package.html. --> 
    </module> 

    <!-- All Java AST specific tests live under TreeWalker module. --> 
    <module name="TreeWalker"> 

    <!-- 
    IMPORT CHECKS 
    --> 

    <module name="RedundantImport"> 
     <!-- Checks for redundant import statements. --> 
     <property name="severity" value="error"/> 
    </module> 

    <module name="ImportOrder"> 
     <!-- Checks for out of order import statements. --> 

     <property name="severity" value="warning"/> 
     <property name="groups" value="com.google,android,junit,net,org,java,javax"/> 
     <!-- This ensures that static imports go first. --> 
     <property name="option" value="top"/> 
     <property name="tokens" value="STATIC_IMPORT, IMPORT"/> 
    </module> 

    <!-- 
    JAVADOC CHECKS 
    --> 

    <!-- Checks for Javadoc comments.      --> 
    <!-- See http://checkstyle.sf.net/config_javadoc.html --> 
    <module name="JavadocMethod"> 
     <property name="scope" value="protected"/> 
     <property name="severity" value="warning"/> 
     <property name="allowMissingJavadoc" value="true"/> 
     <property name="allowMissingParamTags" value="true"/> 
     <property name="allowMissingReturnTag" value="true"/> 
     <property name="allowMissingThrowsTags" value="true"/> 
     <property name="allowThrowsTagsForSubclasses" value="true"/> 
     <property name="allowUndeclaredRTE" value="true"/> 
    </module> 

    <module name="JavadocType"> 
     <property name="scope" value="protected"/> 
     <property name="severity" value="error"/> 
    </module> 

    <module name="JavadocStyle"> 
     <property name="severity" value="warning"/> 
    </module> 

    <!-- 
    NAMING CHECKS 
    --> 

    <!-- Item 38 - Adhere to generally accepted naming conventions --> 

    <module name="PackageName"> 
     <!-- Validates identifiers for package names against the 
     supplied expression. --> 
     <!-- Here the default checkstyle rule restricts package name parts to 
     seven characters, this is not in line with common practice at Google. 
     --> 
     <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]{1,})*$"/> 
     <property name="severity" value="warning"/> 
    </module> 

    <module name="TypeNameCheck"> 
     <!-- Validates static, final fields against the 
     expression "^[A-Z][a-zA-Z0-9]*$". --> 
     <metadata name="altname" value="TypeName"/> 
     <property name="severity" value="warning"/> 
    </module> 

    <module name="ConstantNameCheck"> 
     <!-- Validates non-private, static, final fields against the supplied 
     public/package final fields "^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$". --> 
     <metadata name="altname" value="ConstantName"/> 
     <property name="applyToPublic" value="true"/> 
     <property name="applyToProtected" value="true"/> 
     <property name="applyToPackage" value="true"/> 
     <property name="applyToPrivate" value="false"/> 
     <property name="format" value="^([A-Z][A-Z0-9]*(_[A-Z0-9]+)*|FLAG_.*)$"/> 
     <message key="name.invalidPattern" 
       value="Variable ''{0}'' should be in ALL_CAPS (if it is a constant) or be private (otherwise)."/> 
     <property name="severity" value="warning"/> 
    </module> 

    <module name="StaticVariableNameCheck"> 
     <!-- Validates static, non-final fields against the supplied 
     expression "^[a-z][a-zA-Z0-9]*_?$". --> 
     <metadata name="altname" value="StaticVariableName"/> 
     <property name="applyToPublic" value="true"/> 
     <property name="applyToProtected" value="true"/> 
     <property name="applyToPackage" value="true"/> 
     <property name="applyToPrivate" value="true"/> 
     <property name="format" value="^[a-z][a-zA-Z0-9]*_?$"/> 
     <property name="severity" value="warning"/> 
    </module> 

    <module name="MemberNameCheck"> 
     <!-- Validates non-static members against the supplied expression. --> 
     <metadata name="altname" value="MemberName"/> 
     <property name="applyToPublic" value="true"/> 
     <property name="applyToProtected" value="true"/> 
     <property name="applyToPackage" value="true"/> 
     <property name="applyToPrivate" value="true"/> 
     <property name="format" value="^[a-z][a-zA-Z0-9]*$"/> 
     <property name="severity" value="warning"/> 
    </module> 

    <module name="MethodNameCheck"> 
     <!-- Validates identifiers for method names. --> 
     <metadata name="altname" value="MethodName"/> 
     <property name="format" value="^[a-z][a-zA-Z0-9]*(_[a-zA-Z0-9]+)*$"/> 
     <property name="severity" value="warning"/> 
    </module> 

    <module name="ParameterName"> 
     <!-- Validates identifiers for method parameters against the 
     expression "^[a-z][a-zA-Z0-9]*$". --> 
     <property name="severity" value="warning"/> 
    </module> 

    <module name="LocalFinalVariableName"> 
     <!-- Validates identifiers for local final variables against the 
     expression "^[a-z][a-zA-Z0-9]*$". --> 
     <property name="severity" value="warning"/> 
    </module> 

    <module name="LocalVariableName"> 
     <!-- Validates identifiers for local variables against the 
     expression "^[a-z][a-zA-Z0-9]*$". --> 
     <property name="severity" value="warning"/> 
    </module> 


    <!-- 
    LENGTH and CODING CHECKS 
    --> 

    <module name="LineLength"> 
     <!-- Checks if a line is too long. --> 
     <property name="max" value="${com.puppycrawl.tools.checkstyle.checks.sizes.LineLength.max}" default="100"/> 
     <property name="severity" value="error"/> 

     <!-- 
     The default ignore pattern exempts the following elements: 
      - import statements 
      - long URLs inside comments 
     --> 

     <property name="ignorePattern" 
      value="${com.puppycrawl.tools.checkstyle.checks.sizes.LineLength.ignorePattern}" 
      default="^(package .*;\s*)|(import .*;\s*)|(*(\*|//).*https?://.*)$"/> 
    </module> 

    <module name="LeftCurly"> 
     <!-- Checks for placement of the left curly brace ('{'). --> 
     <property name="severity" value="warning"/> 
    </module> 

    <module name="RightCurly"> 
     <!-- Checks right curlies on CATCH, ELSE, and TRY blocks are on 
     the same line. e.g., the following example is fine: 
     <pre> 
     if { 
      ... 
     } else 
     </pre> 
     --> 
     <!-- This next example is not fine: 
     <pre> 
     if { 
      ... 
     } 
     else 
     </pre> 
     --> 
     <property name="option" value="same"/> 
     <property name="severity" value="warning"/> 
    </module> 

    <!-- Checks for braces around if and else blocks --> 
    <module name="NeedBraces"> 
     <property name="severity" value="warning"/> 
     <property name="tokens" value="LITERAL_IF, LITERAL_ELSE, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO"/> 
    </module> 

    <module name="UpperEll"> 
     <!-- Checks that long constants are defined with an upper ell.--> 
     <property name="severity" value="error"/> 
    </module> 

    <module name="FallThrough"> 
     <!-- Warn about falling through to the next case statement. Similar to 
     javac -Xlint:fallthrough, but the check is suppressed if a single-line comment 
     on the last non-blank line preceding the fallen-into case contains 'fall through' (or 
     some other variants which we don't publicized to promote consistency). 
     --> 
     <property name="reliefPattern" 
     value="fall through|Fall through|fallthru|Fallthru|falls through|Falls through|fallthrough|Fallthrough|No break|NO break|no break|continue on"/> 
     <property name="severity" value="error"/> 
    </module> 


    <!-- 
    MODIFIERS CHECKS 
    --> 

    <module name="ModifierOrder"> 
     <!-- Warn if modifier order is inconsistent with JLS3 8.1.1, 8.3.1, and 
      8.4.3. The prescribed order is: 
      public, protected, private, abstract, static, final, transient, volatile, 
      synchronized, native, strictfp 
     --> 
    </module> 


    <!-- 
    WHITESPACE CHECKS 
    --> 

    <module name="WhitespaceAround"> 
     <!-- Checks that various tokens are surrounded by whitespace. 
      This includes most binary operators and keywords followed 
      by regular or curly braces. 
     --> 
     <property name="tokens" value="ASSIGN, BAND, BAND_ASSIGN, BOR, 
     BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN, 
     EQUAL, GE, GT, LAND, LE, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE, 
     LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_RETURN, 
     LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, LOR, LT, MINUS, 
     MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION, 
     SL, SL_ASSIGN, SR_ASSIGN, STAR, STAR_ASSIGN"/> 
     <property name="severity" value="error"/> 
    </module> 

    <module name="WhitespaceAfter"> 
     <!-- Checks that commas, semicolons and typecasts are followed by 
      whitespace. 
     --> 
     <property name="tokens" value="COMMA, SEMI, TYPECAST"/> 
    </module> 

    <module name="NoWhitespaceAfter"> 
     <!-- Checks that there is no whitespace after various unary operators. 
      Linebreaks are allowed. 
     --> 
     <property name="tokens" value="BNOT, DEC, DOT, INC, LNOT, UNARY_MINUS, 
     UNARY_PLUS"/> 
     <property name="allowLineBreaks" value="true"/> 
     <property name="severity" value="error"/> 
    </module> 

    <module name="NoWhitespaceBefore"> 
     <!-- Checks that there is no whitespace before various unary operators. 
      Linebreaks are allowed. 
     --> 
     <property name="tokens" value="SEMI, DOT, POST_DEC, POST_INC"/> 
     <property name="allowLineBreaks" value="true"/> 
     <property name="severity" value="error"/> 
    </module> 

    <module name="ParenPad"> 
     <!-- Checks that there is no whitespace before close parens or after 
      open parens. 
     --> 
     <property name="severity" value="warning"/> 
    </module> 

    </module> 
</module> 
관련 문제