首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Eclipse 統計項目代碼行數:三種高效方法與自動化腳本方案

     編輯:Java 相關知識

統計代碼行數是項目評估、工作量核算、代碼審查的常規需求。本文介紹 Eclipse 內置搜索法、外掛工具法、命令行腳本法三種方案,並提供可直接用於 CI/CD 的跨平台統計腳本。

一、 方法一:Eclipse 內置文件搜索(無需插件)

  1. 菜單欄 Search → File... (或 Ctrl+H → File Search 標籤)。
  2. 勾選 Regular expression(正則表達式)。
  3. 搜索文本框輸入:\n(匹配換行符,即統計物理行數)。
  4. 文件名模式:*(全部)或 *.java(僅 Java)。
  5. Scope 選擇 Enclosing projects(當前工作集/項目)。
  6. 點擊 Search,結果視窗底部顯示 「X matches in Y files」,即總行數。

注意:此法統計物理行數(含空行、註釋行),非邏輯行數(NCLOC)。結果包含所有匹配文件的換行符總和。

二、 方法二:推薦插件 —— MetricsRelay / CodePro Analytix

插件安裝方式核心指標優勢
MetricsRelay (開源) Eclipse Marketplace 搜索安裝 行數、圈複雜度、類耦合、繼承深度、方法參數數等 免費、輕量、右鍵項目 → Metrics 即可生成 HTML 報告
CodePro Analytix (Google 開源) Update Site: https://codepro.googlecode.com/svn/update/ 代碼覆蓋率、靜態分析、重構建議、JUnit 生成 功能全面、集成 JUnit/覆蓋率
EclEmma (覆蓋率主打) Marketplace 安裝 行覆蓋率、分支覆蓋率、行數統計 可視化覆蓋率高亮、行數統計

三、 方法三:命令行腳本(跨平台、CI/CD 友好)

1. Windows 批處理

@echo off
set PROJECT_DIR=%1
if "%PROJECT_DIR%"=="" set PROJECT_DIR=.
echo 統計目錄: %PROJECT_DIR%
findstr /R /C:"." /S "%PROJECT_DIR%\*.java" | find /C /V "" > nul
rem 更精確:wc -l 等效
powershell -Command "Get-ChildItem -Recurse -Filter *.java '%PROJECT_DIR%' | ForEach-Object { (Get-Content $_).Count } | Measure-Object -Sum | Select-Object -ExpandProperty Sum"

2. Linux/Mac Shell (標準工具鏈)

#!/bin/bash
# count_loc.sh
PROJECT_DIR=${1:-.}
echo "統計目錄: $PROJECT_DIR"

# 1. 物理行數 (含空行/註釋)
TOTAL_LINES=$(find "$PROJECT_DIR" -name "*.java" -type f -exec wc -l {} + | tail -1 | awk '{print $1}')
echo "Java 物理總行數: $TOTAL_LINES"

# 2. 非空非註釋行數 (NCLOC) - 簡易版
NCLOC=$(find "$PROJECT_DIR" -name "*.java" -type f -exec cat {} + | \
    sed '/^\s*$/d' | \
    sed '/^\s*\/\//d' | \
    sed '/^\s*\/\*/,/\*\//d' | \
    wc -l)
echo "Java 非空非註釋行數 (約): $NCLOC"

# 3. 文件數
FILE_COUNT=$(find "$PROJECT_DIR" -name "*.java" -type f | wc -l)
echo "Java 文件數: $FILE_COUNT"

3. Python 跨平台腳本 (推薦:功能豐富、易擴展)

#!/usr/bin/env python3
# count_loc.py
import os
import sys
import argparse
from pathlib import Path

def count_java_loc(root: Path):
    total_lines = 0
    nc_loc = 0
    file_count = 0
    in_block_comment = False
    
    for java_file in root.rglob("*.java"):
        file_count += 1
        try:
            content = java_file.read_text(encoding='utf-8', errors='ignore')
        except Exception:
            continue
            
        lines = content.splitlines()
        total_lines += len(lines)
        
        for line in lines:
            stripped = line.strip()
            # 處理塊註釋 /* ... */
            if in_block_comment:
                if '*/' in stripped:
                    in_block_comment = False
                continue
            if '/*' in stripped:
                in_block_comment = True
                if '*/' in stripped:  # 同行結束
                    in_block_comment = False
                continue
            # 跳過空行、單行註釋
            if not stripped or stripped.startswith('//'):
                continue
            nc_loc += 1
            
    return file_count, total_lines, nc_loc

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="統計 Java 代碼行數")
    parser.add_argument("path", nargs="?", default=".", help="項目根目錄")
    args = parser.parse_args()
    
    root = Path(args.path).resolve()
    if not root.exists():
        print(f"路徑不存在: {root}", file=sys.stderr)
        sys.exit(1)
        
    files, total, nc = count_java_loc(root)
    print(f"項目: {root}")
    print(f"Java 文件數: {files}")
    print(f"物理總行數: {total}")
    print(f"非空非註釋行數 (NCLOC): {nc}")

四、 進階:Maven 插件自動化統計

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>maven-changelog-plugin</artifactId>
    <version>1.0</version>
</plugin>
<!-- 或使用專門統計插件 -->
<plugin>
    <groupId>com.mycila</groupId>
    <artifactId>license-maven-plugin</artifactId>
    <version>3.0</version>
</plugin>

運行 mvn changelog:file 或配置 maven-project-info-reports-plugin 生成項目報告包含行數統計。

五、 總結建議

  1. 快速臨時查看:Eclipse 內置搜索 \n,秒級出結果。
  2. 日常開發監控:安裝 MetricsRelay,右鍵生成可視化報告,包含圈複雜度等質量指標。
  3. CI/CD 集成/跨平台:使用 Python 腳本 或 Shell,輸出 JSON 供下游系統消費。
  4. 區分指標:物理行數(含空行註釋)vs NCLOC(非空非註釋),按需選擇。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved