myeclipse和eclipse插件checkstyle

来源:互联网 发布:淘宝网户外家具 编辑:程序博客网 时间:2024/06/05 08:08

1. myeclipse中安装checkstyle

提示:其他方法(1)可以拷贝features和plugins到myeclipse里面(2)可以使用myeclipse设置link文件的形式引入checkstyle。

本人这里用下面的方法:

1.1 下载和安装

(1)需要下载eclipsecheckstyle插件

链接:http://sourceforge.net/projects/eclipse-cs/files/

 

(2)启动myeclipse,视图help->Myeclipse configuration center如图:

(3)视图software->add site如图:

(4)填入一个名字(最好选择我们要装插件的名字),然后点击add form archive file

找到我们开始下载的插件zip文件添加进来,如图:

(5)如下图右键属性,add to profile

(6)右下角 apply 1 change.开始安装

 

(7)后续步骤一般为下一步和同意协议即可安装完成,重启后出现如图安装成功。



1.2 使用和配置

(1)导入工程,右键->properties,勾选1,是进行验证,然后再2的地方可以导入xml规则文件。

(2)打开工程即可看到如图效果:



2. DOS命令行使用checkstyle

2.1 DOS命令格式概述

命令格式:

· -n 指定包名

· -f 指定输出的格式,默认为”plain”,还可以为XML

· -p 指定要验证的java文件

· -o 讲验证信息输出到一个日志等文件中

· -r 指定要验证的目录


2.2 使用java代码封装DOS下checkstyle

使用思路:(大家有什么好的方法告诉我谢谢,类似执行脚本的)

(1)确定一个文件或者一个目录,

(2)使用java编写一个传入文件位置和验证规则的方法(或者有版本)

(3)调用该方法传入文件位置和规则位置

(4)代码产生一个临时.bat文件,然后Runtime调用执行该.bat文件

private  void  service(String fileName,String ruleName,String version){BufferedWriter   writer=null;Runtime rt=Runtime.getRuntime();Process p=null;String []execut=this.getStringScript(fileName, ruleName, version);File f = new File(execut[1]);try {//写入脚本writer=new BufferedWriter(new FileWriter(f)); writer.write(execut[0]);writer.flush();//执行脚本System.out.println(execut[1]);rt.exec("cmd /c "+execut[1]);} catch (IOException e) {System.out.println("Process-rt.exec(execut)执行异常");e.printStackTrace();}finally{//关闭流if(p!=null){p.destroy();}if(writer!=null){try {writer.close();} catch (IOException e) {e.printStackTrace();}}}//return f;}/** * 用来截取生成文件的名字 * @param fIleName  xxx.java文件 * @return  xxx */private String getFileName(String fIleName){return fIleName.substring(fIleName.lastIndexOf("/")+1,fIleName.lastIndexOf("."));}/** * 用来生成一个.bat的脚本 *@param FIleName需要验证的文件名 * @param ruleName验证规则 * @param version验证版本 * @return str[0]脚本   str[1].bat文件的位置 */private String[] getStringScript(String fileName,String ruleName,String version){String []str=new String[2];//获取当前jdk的路径String dir=this.getDir();StringBuilder sb=new StringBuilder();//配置临时环境变量//sb.append("set JAVA_HOME="+dir+"/jdk \r\n");//sb.append("set PATH=%JAVA_HOME%/bin;%JAVA_HOME%/jre/bin \r\n");sb.append("set CLASSPATH="+dir+"/lib/checkstyle-5.7-all.jar;"+dir+"/jdk/lib \r\n");sb.append("echo \"start run\" \r\n");sb.append("java com.puppycrawl.tools.checkstyle.Main -c "+                  dir+"/role/"+ruleName+" "+dir+"/test/"+fileName);sb.append(" >>"+this.outputFilePath(dir, fileName, version)+" \r\n");sb.append("echo \"end run\" \r\n pause");str[0]=sb.toString();str[1]=dir+"/tempbat/"+getFileName(fileName)+".bat";return str;}/** * 获取工程路径 * @return 字符串路径 */public String getDir(){String dir=System.getProperty("user.dir");return dir.replaceAll("\\\\", "/");}/** * 成功脚本 * @param dir工程目录 * @param fileName 测试文件名字 * @return 生成输出文件的所在路径和名字 */public String outputFilePath(String dir,String fileName,String version){return dir+"/log/"+getFileName(fileName)+version+".log";}}

2.3 使用checkstyle的Main方法实现验证

使用思路:

(1)CMD调用的是checkstyle的一个com.puppycrawl.tools.checkstyle.Main.main方法(静态方法)

(2)根据自己的需求构建相应的函数

(3)将对应的参数传进去即可

Java代码:

 /** * 2.第二种方式 * @param FileName  * @param ruleName * @param version */public void serviceJava(String fileName,String ruleName,String version ){String dir=this.getDir();String[] parm = new String[]{"-c", ruleName, "-r",fileName,"-o",                                this.outputFilePath(dir, fileName, version)};com.puppycrawl.tools.checkstyle.Main.main(parm);} /** * 用来截取生成文件的名字 * @param fIleName  xxx.java文件 * @return  xxx */private String getFileName(String fIleName){return fIleName.substring(fIleName.lastIndexOf("/")+1,fIleName.lastIndexOf("."));}/** * 获取工程路径 * @return 字符串路径 */public String getDir(){String dir=System.getProperty("user.dir");return dir.replaceAll("\\\\", "/");}/** * 成功脚本 * @param dir工程目录 * @param fileName 测试文件名字 * @return 生成输出文件的所在路径和名字 */public String outputFilePath(String dir,String fileName,String version){return dir+"/log/"+getFileName(fileName)+version+".log";}

3. lis系统常用规则
<?xml version="1.0"?><!DOCTYPE module PUBLIC    "-//Puppy Crawl//DTD Check Configuration 1.2//EN"    "http://www.puppycrawl.com/dtds/configuration_1_2.dtd"><module name="Checker"><!-- 重复代码的检查,超过8行就认为重复,UTF-8格式本检查一定要放在"TreeWalker"节点前,否则在Checkclipse中会无法使用。(在ant下可以)--><module name="StrictDuplicateCode">    <property name="min" value="8"/>   <!-- <property name="charset" value="UTF-8"/> --> </module><!-- 长度方面的检查 --><!-- 文件长度不超过1500行 --><module name="FileLength">      <property name="max" value="1500"/></module>    <module name="TreeWalker"><!-- javadoc的检查 --><!-- 检查所有的interface和class -->    <module name="JavadocType"/><!-- 检查所有方法的javadoc,可以不声明RuntimeException --><module name="JavadocMethod">    <property name="allowUndeclaredRTE" value="true"/></module><!-- 检查某个变量的javadoc --> <module name="JavadocVariable"/><!-- 命名方面的检查,它们都使用了Sun官方定的规则。 --><!-- 类名(class 或interface) 的检查 --><module name="TypeName"/><!-- 变量的检查 --><module name="MemberName"/><!-- 方法名的检查 --><module name="MethodName"/><!-- 方法的参数名 --><module name="ParameterName "/><!-- 常量名的检查 --><module name="ConstantName"/><!-- 每行不超过120个字--><module name="LineLength">    <property name="max" value="120"/></module><!-- 方法不超过30行 --><module name="MethodLength">   <property name="tokens" value="METHOD_DEF"/>   <property name="max" value="30"/></module><!-- 方法的参数个数不超过3个。 --><module name="ParameterNumber">   <property name="max" value="3"/></module><!-- 多余的关键字 --><module name="RedundantModifier"/><!-- 对区域的检查 --><!-- 不能出现空白区域 --><module name="EmptyBlock"/><!-- 所有区域都要使用大括号。 --><module name="NeedBraces"/><!-- 多余的括号 --><module name="AvoidNestedBlocks"><property name= "allowInSwitchCase" value="true"/></module><!-- 编码方面的检查 --><!-- 不许出现空语句 --><module name="EmptyStatement"/><!-- 每个类都实现了equals()和hashCode() --><module name="EqualsHashCode"/><!-- 不许使用switch --><module name="IllegalToken"><property name="tokens"value="LITERAL_SWITCH"/></module><!-- 不许内部赋值 --><module name="InnerAssignment"/><!-- 绝对不能容忍魔法数 --><module name="MagicNumber"/><!-- 循环控制变量不能被修改 --><module name="ModifiedControlVariable"/><!-- 多余的throw --><module name="RedundantThrows"/><!-- 不许使用未被简化的条件表达式 --><module name="SimplifyBooleanExpression"/><!-- 不许使用未被简化的布尔返回值 --><module name="SimplifyBooleanReturn"/><!-- String的比较不能用!= 和 == --><module name="StringLiteralEquality"/><!-- if最多嵌套3层 --><module name="NestedIfDepth">    <property name="max" value="3"/></module><!-- try最多被嵌套1层 --><module name="NestedTryDepth"/><!-- clone方法必须调用了super.clone() --><module name="SuperClone"/><!-- finalize 必须调用了super.finalize() --><module name="SuperFinalize"/><!-- 不能catch java.lang.Exception --><module name="IllegalCatch"><property name="illegalClassNames" value="java.lang.Exception"/></module><!-- JUnitTestCase 的核心方法存在。 --><module name="JUnitTestCase"/><!-- 一个方法中最多有3个return --><module name="ReturnCount">    <property name="max" value="3"/></module><!-- 不许对方法的参数赋值 --><module name="ParameterAssignment"/><!-- 不许有同样内容的String --><module name="MultipleStringLiterals"/><!-- 同一行不能有多个声明 --><module name="MultipleVariableDeclarations"/><!-- 各种量度 --><!-- 布尔表达式的复杂度,不超过3 --><module name="BooleanExpressionComplexity"/><!-- 类数据的抽象耦合,不超过7 --><module name="ClassDataAbstractionCoupling"/><!-- 类的分散复杂度,不超过20 --><module name="ClassFanOutComplexity"/><!-- 函数的分支复杂度,不超过10 --><module name="CyclomaticComplexity"/><!-- NPath复杂度,不超过200 --><module name="NPathComplexity"/><!-- 杂项 --><!-- 禁止使用System.out.println --><module name="Regexp">    <property name="format" value="System\.out\.println"/>    <property name="ignoreComments" value="true"/></module><!-- 不许使用与代码同行的注释 --><module name="TrailingComment"/>    </module><!-- 检查翻译文件 --><module name="Translation"/></module>
详细的规则说明可以参考下面这篇博客:

链接:http://blog.csdn.net/yang1982_0907/article/details/18086693


我的工程目录:

jdk:需要加入Jdk

lib:外部使用的jar

log:生成的日志文件存放目录

role:xml规则目录

tempbat:生成的临时.bat文件

test:需要测试的代码文件夹


0 0