CodeLineCounter.java 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. package org.shoulder.maven.plugins.mojo;
  2. import org.apache.maven.model.Resource;
  3. import org.apache.maven.plugin.AbstractMojo;
  4. import org.apache.maven.plugin.MojoExecutionException;
  5. import org.apache.maven.plugin.MojoFailureException;
  6. import org.apache.maven.plugins.annotations.Mojo;
  7. import org.apache.maven.plugins.annotations.Parameter;
  8. import java.io.BufferedReader;
  9. import java.io.File;
  10. import java.io.FileReader;
  11. import java.io.IOException;
  12. import java.util.Arrays;
  13. import java.util.List;
  14. /**
  15. * 统计代码行数(用于测试)
  16. *
  17. * @author lym
  18. * @goal 统计代码行数
  19. */
  20. @Mojo(name = "countLine")
  21. public class CodeLineCounter extends AbstractMojo {
  22. private static final String[] INCLUDES_DEFAULT = {"properties", "xml", "java", "yml"};
  23. @Parameter(defaultValue = "${basedir}")
  24. private File baseDir;
  25. @Parameter(defaultValue = "${project.build.resources}", readonly = true, required = true)
  26. private List<Resource> resources;
  27. @Parameter(defaultValue = "${project.build.sourceDirectory}", required = true, readonly = true)
  28. private File sourceDir;
  29. @Parameter(defaultValue = "${project.build.testResources}", readonly = true, required = true)
  30. private List<Resource> testResources;
  31. @Parameter(defaultValue = "${project.build.testSourceDirectory}", readonly = true, required = true)
  32. private File testSourceDir;
  33. @Parameter(property = "count.include")
  34. private String[] includes;
  35. @Override
  36. public void execute() throws MojoExecutionException, MojoFailureException {
  37. getLog().info("baseDir目录" + baseDir);
  38. if (includes == null || includes.length == 0) {
  39. includes = INCLUDES_DEFAULT;
  40. }
  41. try {
  42. countDir(sourceDir);
  43. countDir(testSourceDir);
  44. for (Resource resource : resources) {
  45. countDir(new File(resource.getDirectory()));
  46. }
  47. for (Resource testResource : testResources) {
  48. countDir(new File(testResource.getDirectory()));
  49. }
  50. } catch (IOException e) {
  51. throw new MojoExecutionException(e.getMessage());
  52. }
  53. }
  54. private void showInclude() {
  55. getLog().info("include包括" + Arrays.asList(includes));
  56. }
  57. public void countDir(File file) throws IOException {
  58. for (String fileType : includes) {
  59. int fileNum = countFileNum(file, fileType);
  60. int codeLineNum = countLineNum(file, fileType);
  61. if(fileNum == 0 || codeLineNum == 0) {
  62. continue;
  63. }
  64. getLog().info(file.getAbsolutePath().substring(baseDir.getName().length() + "de\\javaCode\\".length()) +
  65. " 共 " + fileNum + " 个 " + fileType + " 文件. " + codeLineNum + " 行代码:");
  66. }
  67. }
  68. /**
  69. * 统计文件多少个
  70. */
  71. public int countFileNum(File file, String fileType) {
  72. int num = 0;
  73. if (file.isFile() && file.getName().endsWith("." + fileType)) {
  74. return 1;
  75. }
  76. if (file.isDirectory()) {
  77. File[] files = file.listFiles();
  78. if(files != null){
  79. for (File f : files) {
  80. num += countFileNum(f, fileType);
  81. }
  82. }
  83. }
  84. return num;
  85. }
  86. /**
  87. * 统计文件多少行
  88. */
  89. public int countLineNum(File file, String fileType) throws IOException {
  90. int lineNum = 0;
  91. if (file.isFile() && file.getName().endsWith("." + fileType)) {
  92. BufferedReader br = new BufferedReader(new FileReader(file));
  93. String line = "";
  94. while ((line = br.readLine()) != null) {
  95. if(!isBlank(line)){
  96. lineNum++;
  97. }
  98. }
  99. return lineNum;
  100. }
  101. if (file.isDirectory()) {
  102. File[] files = file.listFiles();
  103. if(files != null){
  104. for (File f : files) {
  105. lineNum += countLineNum(f, fileType);
  106. }
  107. }
  108. }
  109. return lineNum;
  110. }
  111. public static boolean isBlank(final CharSequence cs) {
  112. int strLen;
  113. if (cs == null || (strLen = cs.length()) == 0) {
  114. return true;
  115. }
  116. for (int i = 0; i < strLen; i++) {
  117. if (!Character.isWhitespace(cs.charAt(i))) {
  118. return false;
  119. }
  120. }
  121. return true;
  122. }
  123. }