±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ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¡£
ÔËÐÐÈÎÎñ
È»ºó¿ÉÒÔÔÚÒÔÏÂĿ¼ÕÒµ½¼ì²é½á¹û
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.
µ¼Èëºó£¬Ê¹Óÿì½Ý¼ü¿ÉÒÔ¿ìËÙ¸ñʽ»¯¡£
ÔÚ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Ã²ËÆÒ²²»ÄÑ¡£ÓÀÔ¶²»ÒªÓÃ×ö²»µ½À´ÏÞÖÆÄãµÄδÀ´¡£ |