123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- package org.shoulder.maven.plugins.mojo;
- import org.apache.maven.model.Resource;
- import org.apache.maven.plugin.AbstractMojo;
- import org.apache.maven.plugin.MojoExecutionException;
- import org.apache.maven.plugin.MojoFailureException;
- import org.apache.maven.plugins.annotations.Mojo;
- import org.apache.maven.plugins.annotations.Parameter;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileReader;
- import java.io.IOException;
- import java.util.Arrays;
- import java.util.List;
- /**
- * 统计代码行数(用于测试)
- *
- * @author lym
- * @goal 统计代码行数
- */
- @Mojo(name = "countLine")
- public class CodeLineCounter extends AbstractMojo {
- private static final String[] INCLUDES_DEFAULT = {"properties", "xml", "java", "yml"};
- @Parameter(defaultValue = "${basedir}")
- private File baseDir;
- @Parameter(defaultValue = "${project.build.resources}", readonly = true, required = true)
- private List<Resource> resources;
- @Parameter(defaultValue = "${project.build.sourceDirectory}", required = true, readonly = true)
- private File sourceDir;
- @Parameter(defaultValue = "${project.build.testResources}", readonly = true, required = true)
- private List<Resource> testResources;
- @Parameter(defaultValue = "${project.build.testSourceDirectory}", readonly = true, required = true)
- private File testSourceDir;
- @Parameter(property = "count.include")
- private String[] includes;
- @Override
- public void execute() throws MojoExecutionException, MojoFailureException {
- getLog().info("baseDir目录" + baseDir);
- if (includes == null || includes.length == 0) {
- includes = INCLUDES_DEFAULT;
- }
- try {
- countDir(sourceDir);
- countDir(testSourceDir);
- for (Resource resource : resources) {
- countDir(new File(resource.getDirectory()));
- }
- for (Resource testResource : testResources) {
- countDir(new File(testResource.getDirectory()));
- }
- } catch (IOException e) {
- throw new MojoExecutionException(e.getMessage());
- }
- }
- private void showInclude() {
- getLog().info("include包括" + Arrays.asList(includes));
- }
- public void countDir(File file) throws IOException {
- for (String fileType : includes) {
- int fileNum = countFileNum(file, fileType);
- int codeLineNum = countLineNum(file, fileType);
- if(fileNum == 0 || codeLineNum == 0) {
- continue;
- }
- getLog().info(file.getAbsolutePath().substring(baseDir.getName().length() + "de\\javaCode\\".length()) +
- " 共 " + fileNum + " 个 " + fileType + " 文件. " + codeLineNum + " 行代码:");
- }
- }
- /**
- * 统计文件多少个
- */
- public int countFileNum(File file, String fileType) {
- int num = 0;
- if (file.isFile() && file.getName().endsWith("." + fileType)) {
- return 1;
- }
- if (file.isDirectory()) {
- File[] files = file.listFiles();
- if(files != null){
- for (File f : files) {
- num += countFileNum(f, fileType);
- }
- }
- }
- return num;
- }
- /**
- * 统计文件多少行
- */
- public int countLineNum(File file, String fileType) throws IOException {
- int lineNum = 0;
- if (file.isFile() && file.getName().endsWith("." + fileType)) {
- BufferedReader br = new BufferedReader(new FileReader(file));
- String line = "";
- while ((line = br.readLine()) != null) {
- if(!isBlank(line)){
- lineNum++;
- }
- }
- return lineNum;
- }
- if (file.isDirectory()) {
- File[] files = file.listFiles();
- if(files != null){
- for (File f : files) {
- lineNum += countLineNum(f, fileType);
- }
- }
- }
- return lineNum;
- }
- public static boolean isBlank(final CharSequence cs) {
- int strLen;
- if (cs == null || (strLen = cs.length()) == 0) {
- return true;
- }
- for (int i = 0; i < strLen; i++) {
- if (!Character.isWhitespace(cs.charAt(i))) {
- return false;
- }
- }
- return true;
- }
- }
|