久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Checkstyle使用參考

 wangxq 2011-07-07

Checkstyle使用參考

一,、Checkstyle簡介

Checkstyle 是一個幫助開發(fā)者按照某種習慣編寫 java 代碼的工具,,他實現(xiàn)了代碼檢查的自動化,,幫助人們從這種繁瑣的工作中解放出來。

默認提供了對 sun 編程規(guī)范的支持,,但是 Checkstyle 是一個具有高可配置性的,,你完全可以根據(jù)自己的要求來配置需要檢查的內容。

二,、Checkstyle+Ant

1 下載安裝

1.1 Ant的下載安裝

下載apache-ant-1.6.5-bin.zip,,然后解壓縮到C:/apache-ant-1.6.5(或其它路徑下)。

添加新的環(huán)境變量ANT_HOME

添加新的變量值到環(huán)境變量Path

Dos窗口下輸入ant回車,,如果看到下圖的內容,,說明Ant已經成功安裝了,。

如果沒看到上圖的信息,請根據(jù)運行環(huán)境的實際情況檢查下列信息

ANT_HOME = C:/apache-ant-1.6.5

JAVA_HOME = C:/j2sdk1.4.2_08

Path = %ANT_HOME%/bin;%JAVA_HOME%/bin;(后面還有很多,,這里就省略了)

ClASSPATH = .;%JAVA_HOME%/jre/lib/rt.jar;%JAVA_HOME%/lib/tools.jar

(注意上面一行等號后面是個點“.” 后面接分號)

1.2 Checkstyle的下載安裝

下載checkstyle-4.2.zip,,然后解壓縮到C:/checkstyle-4.2(或其它路徑下),下文提到這個路徑時將使用CHECKSTYLE_HOME代替,。

CHECKSTYLE_HOME目錄下的checkstyle-optional-4.2.jar拷貝到ANT_HOME/lib目錄下

2.使用Ant實現(xiàn)代碼檢查

使用Ant實現(xiàn)代碼檢查,,我們共需要三個文件build.xml, user.propertiessunrising_checks.xml,下面分別對講解這三個文件,。

2.1 user.properties

這個文件是將要在build.xml中用的屬性文件,,用戶可以自定義下面的常用的屬性

 

# 項目名稱

project.name=TopShelf

# 項目所在的路徑

project.dir=F/://eclipse//WorkSpace20061012//WordEmTest

# 源文件所在的路徑

project.src.dir=${project.dir}//src

# 報告生成的位置, 默認的位置為${project.dir}//report

# 如果需要在其它位置生成報告, 請刪除下面一行前面的"#",并且在等號后面給出路徑

# project.checkstyle.report.dir=new path here

# 檢測結果文件名, 默認為${project.name}-checkstyle-result-${DSTAMP}.xml

# 如果需要在改成其它的文件名, 請刪除下面一行前面的"#",并且在等號后面給出新的文件名

# project.check.result.name=new name here

# 檢測報告文件名, 默認為${project.name}-checkstyle-report-${DSTAMP}.html

# 如果需要在改成其它的文件名, 請刪除下面一行前面的"#",并且在等號后面給出新的文件名

# project.check.report.name=new name here

# checkstyle的配置文件, 默認的配置文件為${basedir}/sunrising_checks.xml

# 如果需要使用其它的配置文件, 請刪除下面一行前面的"#",并且在等號后面給出配置文件的路徑

# checkstyle.config=new path here

# checkstyle的報告風格, 默認值為${basedir}/contrib/checkstyle-noframes.xsl

# checkstyle.report.style=new style here

2.2 build.xml

這個文件是運行Ant時需要用的文件

 

<project name="checkstyle" default="checkstyle" basedir=".">

  <!-- 導入屬性文件 -->

<property file="user.properties" />

<target name="init">

<tstamp/>

<!-- 報告的生成位置 -->

<property name="project.checkstyle.report.dir" value="${project.dir}/report"/>

<!-- 檢測結果的文件名 -->

<property name="project.check.result.name" value="${project.name}-checkstyle-result-${DSTAMP}.xml"/>

<!-- 檢測報告的文件名 -->

<property name="project.check.report.name" value="${project.name}-checkstyle-report-${DSTAMP}.html"/>

<!-- 所使用的配置文件 -->

<property name="checkstyle.config" value="${basedir}/sunrising_checks.xml"/>

<!-- 報告風格 -->

<property name="checkstyle.report.style" value="${basedir}/contrib/checkstyle-noframes.xsl"/>

<!-- 檢測結果 -->

<property name="checkstyle.result" value="${project.checkstyle.report.dir}/${project.check.result.name}"/>

<!-- 檢測報告 -->

<property name="checkstyle.report" value="${project.checkstyle.report.dir}/${project.check.report.name}"/>

<!-- 新建報告所在的文件夾 -->

<mkdir dir="${project.checkstyle.report.dir}" />

</target>

<taskdef resource="checkstyletask.properties" classpath="${basedir}/checkstyle-all-4.2.jar" />

<target name="checkstyle" depends="init" description="Check java code and report ">

<!-- failOnViolation: 檢測到問題時是否停止 -->

<!-- failureProperty: 是否有問題, 這個參數(shù)在此暫沒有用到 -->

<!-- See CHECKSTYLE_HOME/docs/anttask.html -->

<checkstyle config="${checkstyle.config}" failOnViolation="false" failureProperty="checkstyle.failure">

<formatter type="xml" tofile="${checkstyle.result}"/>

<fileset dir="${project.src.dir}" includes="**/*.java"/>

</checkstyle>

<!-- 生成報告,其格式取決于${checkstyle.report.style} -->

<style in="${checkstyle.result}" out="${checkstyle.report}" style="${checkstyle.report.style}"/>

</target>

</project>

2.3 sunrising_checks.xml

這個文件是Checkstyle在執(zhí)行代碼檢測時需要用的配置文件,里面定義的檢查規(guī)則,。詳細的規(guī)則定義將在第四節(jié)做詳細介紹,。

2.4 執(zhí)行步驟

A) 將上面提到的三個文件拷貝到CHECKSTYLE_HOME目錄下

B) 打開DOS窗口進入到CHECKSTYLE_HOME目錄下

C) 輸入ant,然后回車,,如果能看到BUILD SUCCESSFUL就成功了,。

三、Checkstyle+Eclipse

1 安裝CheckstyleEclipse的插件

A) 首選下載CheckstyleEclipse的插件-com.atlassw.tools.eclipse.checkstyle_4.1.1-bin.zip

B) 將插件解壓縮后,,將featuresplugins和文件夾中的內容拷貝到Eclipse下對應的文件夾下

C) 刪除ECLIPSE_HOME/configuration/下的org.eclipse.update文件夾,,然后重新啟動Eclipse

2 Eclipse中使用Checkstyle

A) 插件安裝成功后,在Eclipse中點擊Window->Preferences選項可以看到下圖

B) 在項目上使用Checkstyle,。右鍵單擊項目,,選擇Properties選項后可以看到下圖

1) 選擇Checkstyle

2) 選中Check BoxCheckstyle active for this project

3) 從下拉列表中選擇一個Checkstyle的配置文件

4) 點擊OK

查看項目中的任意一個源文件,可以看到類似下圖的情況:

將鼠標指向圖中的放大鏡處稍做停留便可看到提示信息,,如圖片中的”Missing a Javadoc comment.”

四,、Checkstyle配置文件的簡要說明

關于配置文件的各個模塊的更多細節(jié),請參考CHECKSTYLE_HOME/docs/index.html

 

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

<!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.2//EN"

"http://www./dtds/configuration_1_2.dtd">

<!-- 對于所有的模塊來書,如果有這個模塊則說明檢測這一項,沒有則不檢測這一項 -->

<!-- 所有的模塊中,ROOT必須為Checker -->

<module name="Checker">

<!-- 檢驗每個包是否存在package.html文件-->

<!-- See http://checkstyle./config_javadoc.html#PackageHtml -->

<!--

<module name="PackageHtml"/>

-->

<!-- 檢驗每個文件末尾是否有一個空行-->

<!-- See http://checkstyle./config_misc.html#NewlineAtEndOfFile -->

<!--

<module name="NewlineAtEndOfFile"/>

-->

<!-- Checks that property files contain the same keys. -->

<!-- See http://checkstyle./config_misc.html#Translation -->

<module name="Translation"/>

<module name="TreeWalker">

<!-- Checks for Javadoc comments. -->

<!-- See http://checkstyle./config_javadoc.html -->

<!-- Checks Javadoc comments for method definitions.-->

<module name="JavadocMethod">

<property name="scope" value="public"/>

<!-- 是否允許錯誤的參數(shù)聲明,true為允許,缺省為不允許 -->

<property name="allowMissingParamTags" value="true"/>

<!-- 是否允許錯誤的錯誤聲明,true為允許,缺省為不允許 -->

<property name="allowMissingThrowsTags" value="true"/>

<!-- 是否允許錯誤的返回類型聲明,true為允許,缺省為不允許 -->

<property name="allowMissingReturnTag" value="true"/>

</module>

<!--Checks Javadoc comments for class and interface definitions.-->

<module name="JavadocType"/>

<!-- Checks that variables have Javadoc comments.-->

<module name="JavadocVariable">

<property name="scope" value="protected"/>

</module>

<!-- 檢查Javadoc的格式 -->

<module name="JavadocStyle">

<property name="scope" value="public"/>

<!-- Comment的第一句的末尾是否要有一個句號,true必須有,defaulttrue -->

<property name="checkFirstSentence" value="false"/>

<!-- 檢查錯誤的HTML腳本,比如不匹配,true檢查,defaulttrue -->

<property name="checkHtml" value="true"/>

</module>

<!-- Checks for Naming Conventions. -->

<!-- See http://checkstyle./config_naming.html -->

<!-- 確省必須以Abstract開始或者以Factory結束 -->

<!--

<module name="AbstractClassName"/>

-->

<module name="ConstantName"/>

<module name="LocalFinalVariableName"/>

<module name="LocalVariableName"/>

<module name="MemberName"/>

<module name="MethodName"/>

<module name="PackageName"/>

<module name="ParameterName"/>

<module name="StaticVariableName"/>

<module name="TypeName"/>

<!-- Checks for Headers -->

<!-- See http://checkstyle./config_header.html -->

<!-- 檢查文件是否以指定文件開始,這里最好是放一些版權信息和工程描述 -->

<!-- headerFile:指定的文件 -->

<!-- ignoreLines:忽略哪些行,","分隔 -->

<!--

<module name="Header">

<property name="headerFile" value="java.header"/>

<property name="ignoreLines" value="2, 3, 4, 5"/>

</module>

-->

<!-- Following interprets the header file as regular expressions. -->

<!--

<module name="RegexpHeader"/>

-->

<!-- Checks for imports -->

<!-- See http://checkstyle./config_import.html -->

<!-- 檢查使用*號的導入,默認為全部類 -->

<module name="AvoidStarImport"/>

<!-- 檢查是否有非法的包,確省檢查sun.*;對于某些包是不建議直接調用的 -->

<module name="IllegalImport">

<property name="illegalPkgs" value="sun.*"/>

</module>

<!-- 檢查多于的導入,如一個類導入了多次 -->

<module name="RedundantImport"/>

<!-- 檢查沒有使用的導入 -->

<module name="UnusedImports"/>

<!-- 導入排序 -->

<!-- groups:分組,哪些是一組的 -->

<!-- ordered:同一個組內是否排序,true排序,確省為true -->

<!-- separated:各個組之間是否需要用空行分隔,確省為false -->

<!-- caseSensitive:是否是大小寫敏感的,確省是 -->

<!--

<module name="ImportOrder">

<property name="groups" value="java,javax"/>

<property name="ordered" value="true"/>

<property name="separated" value="true"/>

<property name="caseSensitive" value="true"/>

</module>

-->

<!-- Checks for Size Violations. -->

<!-- See http://checkstyle./config_sizes.html -->

<!-- 檢查方法內可執(zhí)行語句的個數(shù),確省為30 -->

<!--

<module name="ExecutableStatementCount">

<property name="max" value="30"/>

</module>

-->

<!-- 文件的最大行數(shù),缺省為1500 -->

<module name="FileLength">

<property name="max" value="2000"/>

</module>

<!-- 每行的最大字符數(shù),缺省為80 -->

<module name="LineLength">

<!-- 忽略指定格式的行,*號開始的, -->

<!--

<property name="ignorePattern" value="^ */* *[^ ]+$"/>

-->

<property name="max" value="120"/>

</module>

<!-- 方法的最大行數(shù),缺省為150 -->

<module name="MethodLength">

<property name="max" value="200"/>

<!-- 統(tǒng)計時是否包括空行和以//開始的注釋,缺省為統(tǒng)計(true)-->

<property name="countEmpty" value="false"/>

</module>

<!-- 匿名類的最大行數(shù),缺省為20 -->

<module name="AnonInnerLength">

<property name="max" value="60"/>

</module>

<!-- 檢查方法和構造子參數(shù)的最大個數(shù),缺省為7 -->

<module name="ParameterNumber"/>

<!-- Checks for whitespace -->

<!-- See http://checkstyle./config_whitespace.html -->

<module name="EmptyForInitializerPad"/>

<module name="EmptyForIteratorPad"/>

<module name="MethodParamPad">

<property name="allowLineBreaks" value="true"/>

</module>

<module name="NoWhitespaceAfter"/>

<module name="NoWhitespaceBefore"/>

<module name="OperatorWrap"/>

<module name="ParenPad"/>

<module name="TypecastParenPad"/>

<module name="TabCharacter"/>

<module name="WhitespaceAfter"/>

<module name="WhitespaceAround"/>

<!-- Modifier Checks -->

<!-- See http://checkstyle./config_modifiers.html -->

<!-- 要求JLS suggestions -->

<!--

<module name="ModifierOrder"/>

-->

<module name="RedundantModifier"/>

<!-- Checks for blocks. You know, those {}'s -->

<!-- See http://checkstyle./config_blocks.html -->

<!-- 檢查空塊 -->

<!--

<module name="EmptyBlock"/>

-->

<module name="LeftCurly"/>

<!-- 檢查只有必須有{},確省為必須,主要在if,else時有這樣的情況 -->

<module name="NeedBraces"/>

<!-- 檢查"}",確省在同一行 -->

<module name="RightCurly">

<property name="option" value="alone"/>

</module>

<!-- 檢查多余嵌套的{},請看文檔,不易說明 -->

<module name="AvoidNestedBlocks"/>

<!-- Checks for common coding problems -->

<!-- See http://checkstyle./config_coding.html -->

<module name="AvoidInlineConditionals"/>

<module name="CovariantEquals"/>

<module name="DeclarationOrder"/>

<module name="DefaultComesLast"/>

<module name="DoubleCheckedLocking"/>

<!--

<module name="EmptyStatement"/>

-->

<module name="EqualsHashCode"/>

<!-- 變量必須初始化為自己的類型,如果給一個Object類型的變量初始化為null會提示 -->

<!--

<module name="ExplicitInitialization"/>

-->

<module name="FallThrough"/>

<!--

<module name="FinalLocalVariable"/>

-->

<module name="HiddenField">

<property name="ignoreConstructorParameter" value="true"/>

<property name="ignoreSetter" value="true"/>

</module>

<!-- Exception, Throwable, RuntimeException是不允許catch -->

<!--

<module name="IllegalCatch"/>

-->

<module name="IllegalInstantiation"/>

<!--

<module name="IllegalToken"/>

-->

<module name="IllegalTokenText"/>

<module name="IllegalType"/>

<module name="InnerAssignment"/>

<!--檢查直接數(shù)

<module name="MagicNumber"/>

檢查是否有構造子

<module name="MissingCtor"/>

-->

<module name="MissingSwitchDefault"/>

<module name="MultipleVariableDeclarations"/>

<!--

<module name="JUnitTestCase"/>

<module name="NestedIfDepth"">

<property name="max" value="5"/>

</module>

<module name="NestedTryDepth"">

<property name="max" value="5"/>

</module>

<module name="PackageDeclaration"/>

<module name="ReturnCount"/>

-->

<!-- 不能為參數(shù)付值 -->

<!--

<module name="ParameterAssignment"/>

-->

<module name="RedundantThrows"/>

<!-- 不能理解的,好像是bug

<module name="RequireThis"/>

-->

<module name="SimplifyBooleanExpression"/>

<module name="SimplifyBooleanReturn"/>

<module name="StringLiteralEquality"/>

<module name="SuperClone"/>

<module name="SuperFinalize"/>

<module name="UnnecessaryParentheses"/>

<!-- Checks for class design -->

<!-- See http://checkstyle./config_design.html -->

<!-- 要求一個方法必須聲明為Extension,否則必聲明為abstract, final or empty -->

<!--

<module name="DesignForExtension"/>

-->

<!-- 檢查private構造子是否聲明為final,這里有個問題,Java中構造子是不能聲明為final -->

<!--

<module name="FinalClass"/>

-->

<!-- 要求一定要有一個構造子 -->

<!--

<module name="HideUtilityClassConstructor"/>

-->

<module name="InterfaceIsType"/>

<!-- 檢查變量的可見性,確省只允許static final public,否則只能為private -->

<module name="VisibilityModifier">

<property name="packageAllowed" value="true"/>

<property name="protectedAllowed" value="true"/>

</module>

<!--

<module name="MutableException"/>

-->

<!-- 限制拋出聲明的指定數(shù)量,確省為1 -->

<!--

<module name="ThrowsCount"/>

-->

<!-- Miscellaneous other checks. -->

<!-- See http://checkstyle./config_misc.html -->

<!-- 數(shù)組的聲明是否允許Java的類型,確省為允許,Java類型為String[] xx,C++的類型為String xx[]; -->

<module name="ArrayTypeStyle"/>

<!--

<module name="FinalParameters"/>

-->

<!-- 一般性的代碼問題,不好的習慣等,可以多 -->

<!-- 文件中使用了System.out.print-->

<module name="GenericIllegalRegexp">

<property name="format" value="System/.out/.print"/>

<property name="message" value="bad practice of use System.out.print"/>

</module>

<module name="GenericIllegalRegexp">

<property name="format" value="System/.exit"/>

<property name="message" value="bad practice of use System.exit"/>

</module>

<module name="GenericIllegalRegexp">

<property name="format" value="printStackTrace"/>

<property name="message" value="bad practice of use printStackTrace"/>

</module>

<!-- 關于Task,你可以聲明自己的Task標識 -->

<module name="TodoComment">

<property name="format" value="TODO"/>

</module>

<!-- 強迫//注釋必須如何,入下要求只能有一行,具體看文檔 -->

<!--

<module name="TrailingComment">

<property name="format" value="^//s*$"/>

</module>

-->

<!-- main方法經常會在debug時使用,但發(fā)行版本的時候可能并不需要這個方法,提示 -->

<!--

<module name="UncommentedMain"/>

-->

<!-- 當定義一個常量時,希望使用大寫的L來代替小寫的l,原因是小寫的l和數(shù)字1很象 -->

<module name="UpperEll"/>

<!-- 檢查正確的縮進,這個更象是個人習慣 -->

<!--

<module name="Indentation">

<property name="braceAdjustment" value="0"/>

</module>

-->

<!-- Checks For Metrics -->

<!-- See http://checkstyle./config_metrics.html -->

<!-- 檢查嵌套復雜度 -->

<module name="CyclomaticComplexity">

<property name="max" value="12"/>

</module>

</module>

</module>

五,、Checkstyle常見的輸出結果

1Type is missing a javadoc commentClass

缺少類型說明

2“{” should be on the previous line

“{” 應該位于前一行

3Methods is missing a javadoc comment

方法前面缺少javadoc注釋

4Expected @throws tag for “Exception”

在注釋中希望有@throws的說明

5“.” Is preceeded with whitespace “.”

前面不能有空格

6“.” Is followed by whitespace“.”

后面不能有空格

7“=” is not preceeded with whitespace

“=” 前面缺少空格

8“=” is not followed with whitespace

“=” 后面缺少空格

9“}” should be on the same line

“}” 應該與下條語句位于同一行

10Unused @param tag for “unused”

沒有參數(shù)“unused”,不需注釋

11Variable “CA” missing javadoc

變量“CA”缺少javadoc注釋

12Line longer than 80characters

行長度超過80

13Line contains a tab character

行含有”tab” 字符

14Redundant “Public” modifier

冗余的“public” modifier

15Final modifier out of order with the JSL

suggestionFinal modifier的順序錯誤

16Avoid using the “.*” form of import

Import格式避免使用“.*”

17Redundant import from the same package

從同一個包中Import內容

18Unused import-java.util.list

Import進來的java.util.list沒有被使用

19Duplicate import to line 13

重復Import同一個內容

20Import from illegal package

從非法包中 Import內容

21“while” construct must use “{}”

“while” 語句缺少“{}”

22Variable “sTest1” must be private and have accessor method

變量“sTest1”應該是private的,,并且有調用它的方法

23Variable “ABC” must match pattern “^[a-z][a-zA-Z0-9]*$”

變量“ABC”不符合命名規(guī)則“^[a-z][a-zA-Z0-9]*$”

24“(” is followed by whitespace

“(” 后面不能有空格

25“)” is proceeded by whitespace

“)” 前面不能有空格

    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約