myeclipse和eclipse插件checkstyle

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如图:

myeclipse和eclipse插件checkstyle_第1张图片

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

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

myeclipse和eclipse插件checkstyle_第2张图片

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

myeclipse和eclipse插件checkstyle_第3张图片

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

 

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

myeclipse和eclipse插件checkstyle_第4张图片

1.2 使用和配置

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

myeclipse和eclipse插件checkstyle_第5张图片

(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


我的工程目录:

myeclipse和eclipse插件checkstyle_第6张图片

jdk:需要加入Jdk

lib:外部使用的jar

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

role:xml规则目录

tempbat:生成的临时.bat文件

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


你可能感兴趣的:(checkstyle,checkstyle5.6)