maven編寫外掛——統計程式碼行數
前言
使用maven外掛可以將一些有意思的功能抽象成maven外掛服務,安裝到本地maven倉庫以後,可以很方便的使用功能,也可以在其他專案當中引用外掛,使用外掛功能。
下面完成統計目錄下包含的指定型別的檔案,以及該型別所有檔案的行數總和,可以用來統計專案中的程式碼行數~
1、新建maven外掛工程
外掛也就是一個maven工程,可以使用Archetype
外掛新建一個maven專案。
1.1 pom檔案如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.zhoucy</groupId>
<artifactId>maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version >
<packaging>maven-plugin</packaging>
<name>maven-plugin</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId >
<artifactId>maven-plugin-api</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>cn.zhoucy</groupId>
<artifactId>maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<configuration>
<currentBaseDir>${basedir}</currentBaseDir>
<suffix>.java</suffix>
</configuration>
<executions>
<execution>
<!-- phase表示執行在哪個階段 -->
<phase>clean</phase>
<goals>
<!--goal標識執行哪個命令,可以這樣認為-->
<goal>fileCountTotal</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
其中build外掛是該專案測試時,自己呼叫自己,後面會解釋呼叫外掛的兩種方式。
只要注意
<packaging>maven-plugin</packaging>
以及外掛編寫需要引入兩個jar包即可。
1.2 新建java類,程式碼如下:
package cn.zhoucy;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
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.ArrayList;
import java.util.List;
/**
* Created by zhoucy on 18/6/1
**/
@Mojo(name = "fileCountTotal",requiresProject = false,defaultPhase = LifecyclePhase.PACKAGE)
public class CountMojo extends AbstractMojo{
private static List<String> fileList = new ArrayList<String>();
private int allLines = 0;
//獲取檔案路徑
@Parameter(property = "currentBaseDir",defaultValue = "/Users/pathHome")
private String currentBaseDir;
//定義檔案字尾 如果要傳遞 Args的引數需要這樣傳:mvn clean -Dsuffix=.xml
@Parameter(property = "suffix",defaultValue = ".java")
private String suffix;
public void execute() throws MojoExecutionException, MojoFailureException {
List<String> fileList = scanFile(currentBaseDir);
System.out.println("FilePath:"+currentBaseDir);
System.out.println("defaultFileSuffix:"+suffix);
System.out.println("FileTotal:"+fileList.size());
System.out.println("allLines:"+allLines);
}
/**
* 遞迴統計檔案,並將符合條件的檔案放入集合中
* @param filePath
* @return
*/
private List<String> scanFile(String filePath) {
File dir = new File(filePath);
// 遞迴查詢到所有的class檔案
for (File file : dir.listFiles()) {
if (file.isDirectory()) {
scanFile(file.getAbsolutePath());
} else {
if(file.getName().endsWith(suffix)){
fileList.add(file.getName());
allLines+=countLines(file);
}
}
}
return fileList;
}
private int countLines(File file) {
int lines = 0;
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
while (reader.ready()) {
reader.readLine();
lines++;
}
} catch (IOException e) {
e.printStackTrace();
}
return lines;
}
}
2 核心點及兩種呼叫外掛方式
2.1 檔案中核心點解釋:
AbstractMojo
:編寫的類集成了這個類,這個是編寫maven外掛的類必須要繼承的類,並實現方法execute()
,該方法即是maven外掛執行時的入口。@Mojo
:類上有該註解,其中有很多屬性值,
name="fileCountTotal"
:表示該類的執行方法名為gileCountTotal
,當你在其他專案中引用該外掛的時候goal
屬性的值。或者在命令列中直接使用該外掛值,用來區分要執行的類,因為一個maven外掛中,可以有很多繼承了AbstractMojo
的類,在類上加該屬性用於區分。
requiresProject = false
:該屬性值表示,編寫的外掛所執行的目標專案是否必須為maven專案,顯然我們這裡是想要統計指定目錄下的檔案以及檔案所含內容行數,不需要目標專案必須為maven專案,故為false。
@Parameter
:表示的是該引數是可以在呼叫maven外掛的時候動態將引數值傳遞進來的,因為maven外掛有兩種呼叫方式,所以有兩種傳遞引數的方式。
2.2 呼叫及傳參方式
一種呼叫方式為:在maven專案中引用外掛座標:
<build>
<plugins>
<plugin>
<groupId>cn.zhoucy</groupId>
<artifactId>maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<configuration>
<currentBaseDir>${basedir}</currentBaseDir>
<suffix>.java</suffix>
</configuration>
<executions>
<execution>
<!-- phase表示執行在哪個階段 -->
<phase>clean</phase>
<goals>
<!--goal標識執行哪個命令,可以這樣認為-->
<goal>fileCountTotal</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
此時通過
<configuration>
<currentBaseDir>${basedir}</currentBaseDir>
<suffix>.java</suffix>
</configuration>
來傳遞引數值。
其中
<phase>clean</phase>
表示執行的期間是clean。故可以通過mvn clean
來呼叫該外掛對當前maven工程中的檔案行數進行統計。
另一種呼叫方式為命令列呼叫:
直接在bash中打入下面命令:
mvn cn.zhoucy:maven-plugin:1.0-SNAPSHOT:fileCountTotal -DcurrentBaseDir=/Users/pathHome/IdeaWorkspace -Dsuffix=.java
命令解析:
mvn groupId:artifactId:version:繫結名 引數...
可得到如下結果:
FilePath:/Users/pathHome/IdeaWorkspace
defaultFileSuffix:.java
FileTotal:240
allLines:14559
提醒:
在呼叫外掛之前,需要使用mvn clean install
將外掛安裝到本地maven倉庫。
相關推薦
maven編寫外掛——統計程式碼行數
前言 使用maven外掛可以將一些有意思的功能抽象成maven外掛服務,安裝到本地maven倉庫以後,可以很方便的使用功能,也可以在其他專案當中引用外掛,使用外掛功能。 下面完成統計目錄下包含的指定型別的檔案,以及該型別所有檔案的行數總和,可以用來統
Python小工具:統計程式碼行數
本身程式碼難度不大,就是一個心血來潮做的小玩意 功能介紹 實現對於指定的字尾檔案進行行數統計 可以忽略指定的資料夾,對於一些IDE自動生成的程式碼可以進行忽略(預設忽略二進位制檔案) 對於檔案建立時間進行統計 Todo_List 把忽略資料夾的功能支援正則,現在的忽略
如何在Eclipse統計程式碼行數
使用Eclipse可以方便的統計工程或檔案的程式碼行數,方法如下: 1.點選要統計的專案或資料夾,在選單欄點選Search,然後點選File... 2.選中正則表示式(Regular expression),並在搜尋文字框輸入\n 3.在檔名中輸入*.java 4.在
Flask統計程式碼行數
流程: 1.獲取前端的檔案 2.判斷檔案是否zip檔案 3.解壓壓縮包並儲存 4.遍歷解壓後的資料夾 5.判斷檔案是否py檔案,將絕對路徑新增到列表 6.迴圈列表,排除註釋和空號,統計行數 from flask import Blueprint from flask
TFS 裡統計程式碼行數
****** Script for SelectTopNRows command from SSMS ******/ SELECT TeamProjectProjectNodeName 專案名稱 ,checkedinbyname 開發人員 ,SUM
iOS專案統計程式碼行數
很久沒更新了,今天學習了個新技能的,統計程式碼行數,直接用終端和命令列實現,簡單,閒暇時看看的,對幫助開發發用不大;1、開啟終端管理工具2、進入指定專案的根目錄下在終端裡輸入cd,然後打一個空格,再用滑鼠把專案拖進來就行了.比如:cd /Users/tcm/Desktop/s
VS2013 用正則表示式統計程式碼行數
公司 軟體申請 著作權 這鬼東西,所以在網上找了下統計方法,網上的正則表示式 (^:b*[^:b#/]+.*$)似乎不行,查了原因 去掉了了 : 號的匹配可行,具體如下: ^b*[^:b#/]+.*$
VS統計程式碼行數
按CTRL+SHIFT+F (Find in files),勾上支援正則表示式,然後輸入搜尋內容: ^:b*[^:b#/]+.*$ #開頭和/開頭或者空行都不計入程式碼量。如果需要只統計程式碼檔案的程式碼量,可以選擇查詢檔案的型別,比如什麼*.xml, *.resx….可以不檢查,只查*.cs,*.c,
在idea中統計程式碼行數
idea的外掛庫是灰常豐富的,統計程式碼行數可以用到外掛:Statistic。 1.CTRL+ALT+S(或者File→Settings),進入Plugins,點選Browse Repositories 2.搜尋Statistic,選擇安裝。(如果公司有限制網路,可
統計程式碼行數
svn diff -r 1022:1000 > /home/diff 先diff出兩個版本的diff檔案 sed '/\/\*/,/\*\//d' diff | grep "^+" | sed
使用VS2010統計程式碼行數
程式碼行數統計 VS2010中本身集成了非常強大的查詢功能,使用正則表示式可以非常快捷、準確的統計程式碼行數。 統計程式碼行數所用正則表示式: “^:b*[^:b#/]+.*$” 通過查詢的功能選項還可以限定查詢的檔案型別,進而對指定範圍的檔案進行統計。 其中“#開頭和
使用 cloc 統計程式碼行數
可能大家都知道用 `wc -l` 命令進行程式碼行數統計,但是它會將程式碼中的註釋、空行所佔用的文字行都統計在內。如果想檢視一個 tar 包或一個專案目錄中“實際”的程式碼行數並且不願意自己去寫一個指令碼來做此類工作,那麼可以考慮使用 cloc。 cloc 是一個 perl
統計程式碼行數的python小工具
一個用python實現的統計程式碼行數的小工具 先立個flag, 新年新目標,希望2018年程式碼行數可以寫到五萬行。 實現功能 計算出某一目錄以及子目錄下程式碼檔案的行數 在計算程式碼的過程中,只對標準命名的檔案進行統計,如[檔名.檔案型別] 排除
Visual Studio2013統計程式碼行數
1. 在“解決方案資源管理器”中選擇你的專案的解決方案,然後按下Ctrl+Shift+F,彈出“查詢和替換”視窗。 2. 在彈出的“查詢和替換”視窗中,“查詢內容”輸入b*[^:b#/]+.*$,“
用Eclipse 統計程式碼行數小技巧
今天公司SQA問我目前專案程式碼行數有多少,我當時就是想,以前好像寫過類似的統計工具但是一時又找不到 公司網路又不能下載,所以想想eclipse是不是又類似功能,找了下沒有,但突然一想有一個轉彎方法:統計工程裡面的\n個數 1. 按 CTRL+H 開啟查詢對話方塊 選擇fi
[Java]統計Java原始檔程式碼行數,註釋行數,空白行數
題目 1.各種行的說明 在Java源程式中的行共有3種: (1)程式碼行,可執行的Java原始碼。例如: int n = 10; (2) 註釋行,3種註釋均可。例如: /** 文件註釋 */ /* 多行註釋 */ //單行註釋 (3)
統計C/C++程式碼行數
近日在寫一個統計專案中C/CPP/H/CC/HPP檔案(C/C++程式碼檔案字尾名)的小程式。目標是給定一個專案程式碼所在資料夾,統計出總程式碼行數、有效程式碼行數、註釋行數、空白行數。 其中:總程式碼行數 =(有效程式碼行數+註釋行數+空白行數) 每找到一個目的碼檔案,就建立任務投進執行緒池裡,執行速度
程式碼行數統計方法
下面所有方法來自網上: 1 linux find命令 單格式 find -name '*.cpp' | xargs wc -l 多格式 find -name '*[.cpp|.h]' | xargs wc -l 2 git命令 user.
用shell實現一個小指令碼,用來同來統計自己某個檔案下的程式碼,總的程式碼行數,總的註釋量,總的空行量?支援遍歷查詢,支援軟連結查詢
[[email protected] yunwei]# cat sum_code_row_version1.4.sh #!/bin/bash # File Name: sum_code_row.sh # Author: Liwqiang # mail: [email
給定一Java原始碼檔案,統計其註釋行數,空行行數數,程式碼行數及總行數
規定:一行上既有程式碼又有註釋算程式碼行數(例如:int a = 1; //註釋); Java原始碼檔案(要統計的原始碼檔案) package cn.edu.ccit.fwh; public