Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ʹÓÃcheckstyleÀ´¹æ·¶ÄãµÄÏîÄ¿
 
  2899  次浏览      28
 2019-3-14
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚcnblogs£¬±¾ÎÄÕÂÖ÷Òª½éÉÜCheckstyle¡¢ÈçºÎʹÓÃCheckstyleÒÔ¼°CheckstyleµÄ´íÎó¼¶±ðµÈÏà¹ØÄÚÈÝ¡£

CheckstyleÊÇʲô

×Ô´Ó×öÁ˳ÌÐòÔ±£¬¹ØÓÚ¸ñʽ»¯µÄÌÖÂ۾Ͳ»ÔøÖжϹý£¬µ½µ×ʲô²ÅÊÇÕýÈ·µÄ£¬Ê²Ã´²ÅÊÇ´íÎóµÄ£¬µ½ÏÖÔÚҲûÓÐÍêÕûµÄ¶¨ÂÛ¡£µ«Ëæ×Åʱ¼ä·¢Õ¹£¬½¥½¥ÑÜÉú³öÒ»Ì׹淶³öÀ´¡£Ã»ÓÐʲô¾ø¶ÔµÄÕýÈ·ºÍ´íÎ󣬹ؼüÔÚÓڹ淶µÄ¶¨Òå¡£×î³öÃûµÄ¾ÍÊÇgoogle style guide. Checkstyle¾ÍÊÇÒÔÕâÖÖ·ç¸ñ¿ª·¢³öµÄÒ»¸ö×Ô¶¯»¯²å¼þ£¬À´¸¨ÖúÅжϴúÂë¸ñʽÊÇ·ñÂú×ã¹æ·¶¡£

ΪʲôҪÓã¬ÎÒÃÇÐèÒªÂð

×î³õ£¬ÎÒʹÓÃcheckstyleÊÇÒòΪ¹«Ë¾ÒªÇó£¬ÔÚ¾­Àú¹ýÒ»¶ÎÍ´¿àµÄ¸ñÊ½ÖØ¹¹½×¶Îºó£¬½¥½¥Ï°¹ßÁËÕâÑùµÄ¸ñʽ¡£µ½ºóÀ´£¬ÎÒн¨ÏîÄ¿¾Í»á°ÑÕâ¸ö¼Ó½øÈ¥£¬×î¶à¸Ä¼¸Ìõ¹æÔò¡£Ç°Ò»¶Îʱ¼ä£¬ÓÉÓÚ¸ÏÏîÄ¿½ø¶È£¬ÆäËûÈ˲»ÊìϤ£¬Ö»ºÃÏȹصôÁË¡£µ½ºóÃæ·¢ÏÖÕæµÄÿ¸öÈ˵ķç¸ñ¶¼²»Ò»Ñù£¬¶¼¿´×Å´úÂë¹Ö¹ÖµÄ¡£ËùÒÔ£¬ÓÖ¼Ó»ØÀ´ÁË¡£¶ÔÓÚ¶àÈ˺Ï×÷µÄÏîÄ¿£¬»¹Êǽ¨Òé²ÉÓÃÕâÑùµÄ¹æ·¶£¬ÄÚÈݲ»±Ø¾ÐÄàÓÚgoogle-checks£¬ÕÒ³öÊʺÏÄãÃÇÍŶӵķç¸ñ¾ÍºÃ¡£

ÈçºÎʹÓÃ

ÔÚgraldeÖÐʹÓÃ

ÔÚgraldeÖÐÓ÷¨±È½Ï¼òµ¥¡£Ê¾ÀýÏîÄ¿£º https://github.com/Ryan-Miao/springboot-security-demo/blob/master/config/checkstyle/checkstyle.xml

н¨Ò»¸öcheckstyle.gradle

/**
* The Checkstyle Plugin
*
* Gradle plugin that performs quality checks on your
project's Java source files using Checkstyle
* and generates reports from these checks.
*
* Tasks:
* Run Checkstyle against {rootDir}/src/main/java:
./gradlew checkstyleMain
* Run Checkstyle against {rootDir}/src/test/java:
./gradlew checkstyleTest
*
* Reports:
* Checkstyle reports can be found in {project.buildDir}/build/reports/checkstyle
*
* Configuration:
* Checkstyle is very configurable. The configuration
file is located at {rootDir}/config
/checkstyle/checkstyle.xml
*
* Additional Documentation:
* https://docs.gradle.org/current/userguide
/checkstyle_plugin.html
*/

apply plugin: 'checkstyle'

checkstyle {
// The version of the code quality tool to be used.
// The most recent version of Checkstyle can be found at https://github.com/checkstyle/checkstyle/releases
toolVersion = "8.8"

// The source sets to be analyzed as part
of the check and build tasks.
// Use 'sourceSets = []' to remove Checkstyle
from the check and build tasks.
// sourceSets = [project.sourceSets.main, project.sourceSets.test]

// Whether or not to allow the build to continue
if there are warnings.
ignoreFailures = false

// Whether or not rule violations are to be
displayed on the console.
showViolations = true
}

È»ºó£¬ÔÚbuild.gradleÖÐ

apply from: 'checkstyle.gradle'

Ó¦¸ÃÇìÐÒgradleµÄ·±ÈÙ£¬checkstyle¶¼Ö§³ÖµÄµ½8.0ÒÔÉÏÁË¡£ºóÃæÓÃmavenµÄʱºòÓöµ½°æ±¾ÎÊÌ⣬ÍêÃÀÖ÷Òå×·Çó×îаæµÄÐÄ̬»áÄÑÊÜËÀ¡£

È»ºó£¬¹Ø¼üµÄµØ·½ÊÇÖ¸¶¨checkstyle.xml¹æÔòÅäÖÃÎļþÁË¡£Ä¬ÈÏ»á¶ÁÈ¡¸ùĿ¼ÏÂ

config/checkstyle/checkstyle.xml

¼´£¬È¥mavenÖÐÕÒµ½¶ÔÓ¦°æ±¾µÄcheckstyle, È»ºóÏÂÔØjar£¬½âѹ£¬ÀïÃæÓÐgoogle-checks.xml, ¸´ÖÆÀïÃæµÄÄÚÈݼ´¿É¡£

»¹¿ÉÒÔÖ±½ÓÓÃ×îа汾£¬²Î¼ûGithub¡£

ÔËÐÐÈÎÎñ

./gradlew check

È»ºó¿ÉÒÔÔÚÒÔÏÂĿ¼ÕÒµ½¼ì²é½á¹û

build/reports/checkstyle/main.html

¸ü¶àϸ½Ú£¬²Î¿¼gradle ¹ÙÍø.

idea×Ô¶¯¸ñʽ»¯

¶ÔÓÚ¼ì²éµÄ½á¹û£¬ÊÖ¶¯Ð޸ĿÉÄܱȽÏÂý£¬Í¬ÑùÓÐÈËÌṩÁËidea¶ÔÓ¦µÄ²å¼þÀ´¸ñʽ»¯¡£

https://github.com/google/styleguide/edit/gh-pages/intellij-java-google-style.xml

Ó÷¨ÊÇ£¬intelij idea - settting - Editor - code style - scheme, µã»÷ÅԱߵijÝÂÖÉèÖð´Å¥£¬Ñ¡Ôñimport scheme, intelij idea code style xml.

µ¼Èëºó£¬Ê¹Óÿì½Ý¼ü¿ÉÒÔ¿ìËÙ¸ñʽ»¯¡£

contrl + alt + l

ÔÚmavenÖÐʹÓÃ

mavenÖжÔÓÚµ¥Ä£¿éÓ¦Óòμû¹ÙÍø

pomÖÐ

<project>
...
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.0.0</version>
<reportSets>
<reportSet>
<reports>
<report>checkstyle</report>
</reports>
</reportSet>
</reportSets>
</plugin>
</plugins>
</reporting>
...
</project>

ÔËÐÐmaven site¼´¿ÉÔÚÒÔÏÂĿ¼ÕÒµ½½á¹û

target/site/checkstyle.html

Ò²¿ÉÒÔµ¥¶ÀÖ´ÐÐÃüÁî

mvn checkstyle:checkstyle

checkstyle pluginÓëcheckstyleµÄ°æ±¾¶ÔÓ¦¹ØÏµ

http://maven.apache.org/plugins/maven-checkstyle-plugin/history.html

Maven¶àÄ£¿éµÄcheckstyleÅäÖÃ

´ó¶àÊýÇé¿öÏ£¬ÎÒÃÇ»á°ÑÏîÄ¿µÄÂß¼­°´ÕÕÄ£¿é²ð·Ö³öÀ´£¬±ãÓÚ·ÖÀëºÍ½âñÏîÄ¿ÂöÂçÒ²¸ü¼ÓÇåÎú¡£ÔÚÕâÖÖÇé¿öÏ£¬ÎÒÃÇΪÿ¸öÄ£¿é´´½¨checkstyleÈÎÎñ£¬ÐèÒª·Åµ½parentµÄpomÀï¡£

ʾÀýÏîÄ¿£º https://github.com/Ryan-Miao/springboot-starter-feign/blob/master/pom.xml

ÔÚ¸¸ÏîÄ¿£¬parent pomÀ


<build>

<pluginManagement>
<plugins>

<!--compilerÔÚmavenÉùÃ÷ÖÜÆÚÄÚÖã¬ËùÒÔºóÃæ²»ÓÃÉùÃ÷Ò²¿ÉʹÓÃ-->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>


<!--¹«¹²checkstyle±ê×¼ÅäÖ㬿ÉÒÔÔÚ×ÓÄ£¿éÖи²¸Ç£¬ÐÞ¸Ä×Ô¶¨ÒåÑ¡Ïî-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<configLocation>config/checkstyle/google-checks-6.18.xml</configLocation>
<consoleOutput>true</consoleOutput>
<encoding>UTF-8</encoding>
<consoleOutput>true</consoleOutput>
<failsOnError>true</failsOnError>
<linkXRef>false</linkXRef>
<skip>false</skip>
<violationSeverity>error</violationSeverity>
</configuration>
<executions>
<execution>
<id>install</id>
<phase>install</phase>
<goals>
<goal>checkstyle</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>


<!--ËùÓÐ×ÓÄ£¿é¶¼ÒªÖ´ÐеÄplugin-->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
</plugin>
</plugins>

</build>

<reporting>
<!--ËùÓÐ×ÓÄ£¿é¶¼ÒªÖ´Ðеı¨¸æ-->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
</plugin>

</plugins>
</reporting>

ÕâÀmaven-compiler-plugin²»ÊDZØÐëµÄ£¬ÊÂʵÉÏ£¬maven»áÔÚÏîÄ¿ÉúÃüÖÜÆÚÖÐ×Ô¶¯Ö´ÐУ¬ÎÒÌí¼ÓÕâ¸ö²å¼þµÄÔ­ÒòÊÇÔÚideaÀïµÄjava±àÒë¼¶±ðÐèÒª¸ù¾ÝÕâÀïÀ´Ö¸¶¨¡£

checkstyle pluginµÄÅäÖÃÓеã¶à£¬ÐèÒª×ÐϸÀí½âÒ»ÏÂmavenÖÐpluginµÄº¬Òå¡£

build

ÔÚmavenÖ¸ÁîÖ´ÐеÄʱºò»á¶ÁÈ¡Õâ¸ö½ÚµãµÄÅäÖ㬾ö¶¨ÄĸöpluginÓ¦¸ÃÖ´ÐУ¬ÔõôִÐС£

pluginManagement

Õâ¸öÊǰ汾ºÍ¹²Í¬ÅäÖõĽڵã, ͬdependencyManagement, ΪÁËÔ¼Êø×ÓÏîĿʹÓù²Í¬µÄÅäÖᣲ»Í¬µÄÊÇ£¬Õâ¸öÊÇÖ¸plugin¡£

plugin

Õâ¸ö±íʾһ¸ö²å¼þ£¬mavenÖ´ÐÐÃüÁî¶¼¿ÉÒÔÓòå¼þÀ´Àí½â¡£

plugin>configuration

¶ÔÓÚpluginµÄÅäÖ㬾ßÌåÓÐÄÄЩÅäÖÃÏîÒª¿´¾ßÌåµÄplugin¡£

executions>execution

pluginÓ¦¸ÃʲôʱºòÖ´ÐÐ

<execution>
<id>install</id>
<phase>install</phase>
<goals>
<goal>checkstyle</goal>
</goals>
</execution>

id¿ÉÒÔËæÒ⣬phaseÔòÊÇÐèÒª°ó¶¨µ½lifecycleµÄphaseÖеÄÄĸöÃüÁîÉÏ£¬ÕâÀïÊǰ󶨵½installÉÏ£¬¼´µ±Ö´ÐÐmaven installµÄʱºò»áÖ´Ðб¾plugin¡£

goals>goal

Ò»¸öpluginÓжà¸ögoals£¬¼´ÈÎÎñ£¬ÊÇÖ¸°ó¶¨Ö´ÐÐÄĸöÈÎÎñ¡£ÕâÀïÖ®°ó¶¨checkstyle

checkstyleµÄ´íÎó¼¶±ð

ÔÚcheckstyle.xmlµÄÅäÖÃÎļþÖУ¬ÓÐ

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

ÕâÀïÊÇ˵µ±Ç°Õâ¸öÅäÖÃÊÇʲô´íÎó¼¶±ð¡£Èç¹ûÅäÖõÄÊÇerror£¬ÄÇôɨÃèµ½²»·ûºÏÌõ¼þµÄ£¬¾ÍÊÇ´òÓ¡error¡£¶ÔÓÚÅäÖÃÁË

<failsOnError>true</failsOnError>

Ôò»á´ò¶ÏÃüÁîÖ´ÐУ¬´íÎóµÄʱºò»áÍ£Ö¹¡£·ñÔò£¬´íÎó»áÉú³É±¨¸æ£¬µ«²»»á×èÖ¹ÃüÁîÖ´ÐС£Èç¹ûÅäÖÃÁËinfo

[INFO] --- maven-checkstyle-plugin:3.0.0:checkstyle (install) @ j-d2-job ---
[INFO] Starting audit...
[INFO] E:\workspace\parent-demo\demo-job\src\main\java\com\demo\Service.java:147:34: WhitespaceAround: '+' is not preceded with whitespace. [WhitespaceAround]
Audit done.

»áÏÔʾÊÇinfo£¬²»ÊÇerror£¬²»»á×è¶ÏÈÎÎñÖ´ÐС£×ʼ²éÁ˺ܾö¼Ã»ÕÒµ½Ô­Òò£¬Ô­À´ÔÚÕâÀïÅäÖõģ¬-_-||¡£

checkstyleÀïÔÊÐíµÄ´íÎó¼¶±ðÓÐerror, warning, info. Ö»ÓÐerror²¢ÅäÖÃÁËfailsOnError»á´ò¶ÏÃüÁîµÄÖ´ÐС£´ò¶ÏÖ´Ðкó»áÔÚ¶ÔÓ¦µÄ×ÓÄ£¿éµÄtargetÏÂÉú³É

target/checkstyle-result.xml

µ«²»ÄÜÉú³Éhtml£¬»òÕß¿ÉÒÔÑ¡ÔñÉùÃ÷plain£¬Õâ¸ö¸ü²»ºÃ¿´¡£¾À½áÁ˰ëÌì¾ÍÍ×ЭÁË£¬¾Í×Ô¼º¿´xml½á¹û°É£¬ÖªµÀ¾ßÌåµÄclassÖ®ºóÔÙ½áºÏidea checkstyle²å¼þÀ´Ð޸ľÍÐС£

checkstyleÓöµ½µÄ´íÎó

checkstyle»º´æ

ÐÞ¸Ächeckstyle.xmlºó·¢ÏÖ»¹±¨´í£¬Ô­ÒòÊÇûÉúЧ£¬¹ýÒ»»á¾ÍºÃÁË¡£

EmptyCatchBlockCheck

Èç¹ûtry-catch²¶»ñÁËÒì³£µ«È´Ã»ÓÐÈκβÙ×÷£¬Ôò»á±¨¾¯¡£µ±È»£¬ÄãȷʵÈÏΪ²»ÐèÒªÈκβÙ×÷£¬¿ÉÒÔºöÂÔ£¬ºöÂÔÅäÖ÷½°¸

<module name="EmptyCatchBlock">
<property name="exceptionVariableName" value="ignore|expected;/>
</module>

´Ëʱ£¬Ö»Òª°Ñ²¶»ñµÄexcavation±äÁ¿Ãû³ÆÐÞ¸ÄΪignore»òÕßexpected¾Í¿ÉÒÔ±ÜÃâÉó²é¡£

±ÈÈç

try {
throw new RuntimeException();
} catch (RuntimeException expected) {
}


try {
throw new RuntimeException();
} catch (RuntimeException ignore) {
}

»¹¿ÉÒÔÅäÖÃ×¢ÊÍ£¬Ö»ÒªÌí¼Ó×¢Êͼ´¿ÉºöÂÔ

<module name="EmptyCatchBlock">
<property name="exceptionVariableName" value="ignore|expected"/>
<property name="commentFormat" value="ignore"/>
</module>

±ÈÈç

try {
throw new RuntimeException();
} catch (RuntimeException ex) {
//ignore
}

AbbreviationAsWordInName

±äÁ¿Ãû³Æ²»ÔÊÐíÁ¬Ðø´óд£¬×ñÑ­ÍÕ·åÃüÃû¹æ·¶¡£

<module name="AbbreviationAsWordInName">
<property name="tokens" value="VARIABLE_DEF,CLASS_DEF"/>
<property name="ignoreStatic" value="false"/>
<property name="allowedAbbreviationLength" value="1"/>
<property name="allowedAbbreviations" value="XML,URL"/>
</module>

½áÓï

ûÓг¢ÊÔºÍŬÁ¦½â¾ö֮ǰ£¬×ÜÊÇÒÔΪºÜÄѲ»¿ÉÄÜ×öµ½¡£µÈÏñ´ò¹ÖÉý¼¶Ò»Ñù°ÑÏîÄ¿¹ýÒ»±éÖ®ºó£¬Äã·¢ÏÖcheckstyleÃ²ËÆÒ²²»ÄÑ¡£ÓÀÔ¶²»ÒªÓÃ×ö²»µ½À´ÏÞÖÆÄãµÄδÀ´¡£

   
2899 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì