check-code.sh
3.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/bin/bash
# SMF Core 代码质量检查脚本
# 此脚本用于运行各种代码质量分析工具
# 错误时退出
set -e
echo "========================================"
echo "开始 SMF Core 代码质量检查"
echo "========================================"
# 项目根目录
PROJECT_ROOT=$(dirname "$(dirname "$0")")
cd "$PROJECT_ROOT"
# 检查 Maven 是否安装
if ! command -v mvn &> /dev/null; then
echo "错误: Maven 未安装或不在 PATH 中"
echo "请安装 Maven 3.6+ 并将其添加到 PATH 环境变量"
exit 1
fi
# 创建报告目录
mkdir -p reports/code-quality
# 1. 运行 Checkstyle 检查
echo "\n1. 运行 Checkstyle 代码风格检查..."
mvn checkstyle:check
if [ -f "target/checkstyle-result.xml" ]; then
cp target/checkstyle-result.xml reports/code-quality/
echo "Checkstyle 报告已保存至: reports/code-quality/checkstyle-result.xml"
fi
# 2. 运行 SpotBugs 检查
echo "\n2. 运行 SpotBugs 静态代码分析..."
mvn com.github.spotbugs:spotbugs-maven-plugin:4.5.3.0:check
if [ -f "target/spotbugsXml.xml" ]; then
cp target/spotbugsXml.xml reports/code-quality/
echo "SpotBugs 报告已保存至: reports/code-quality/spotbugsXml.xml"
fi
# 3. 运行 PMD 检查(如果在 pom.xml 中配置了)
echo "\n3. 运行 PMD 代码复杂度分析..."
mvn pmd:check || echo "警告: PMD 检查失败,可能未在 pom.xml 中配置"
if [ -f "target/pmd.xml" ]; then
cp target/pmd.xml reports/code-quality/
echo "PMD 报告已保存至: reports/code-quality/pmd.xml"
fi
# 4. 生成测试覆盖率报告
echo "\n4. 生成测试覆盖率报告..."
mvn test jacoco:report
if [ -d "target/site/jacoco" ]; then
cp -r target/site/jacoco reports/code-quality/
echo "测试覆盖率报告已保存至: reports/code-quality/jacoco/index.html"
fi
# 5. 运行 SonarQube 分析(如果有配置)
echo "\n5. 检查是否有 SonarQube 配置..."
if [ -f "sonar-project.properties" ]; then
echo "运行 SonarQube 分析..."
if command -v sonar-scanner &> /dev/null; then
sonar-scanner
elif command -v mvn &> /dev/null; then
mvn sonar:sonar || echo "警告: SonarQube 分析失败,请确保 SonarQube 服务可用"
else
echo "跳过 SonarQube 分析: 未找到 sonar-scanner 或 Maven"
fi
else
echo "跳过 SonarQube 分析: 未找到 sonar-project.properties 文件"
fi
echo "\n========================================"
echo "代码质量检查完成!"
echo "========================================"
echo "报告位置: $PROJECT_ROOT/reports/code-quality/"
echo "\n检查结果摘要:"
echo "- Checkstyle: $(grep -o "severity=\"error\"" reports/code-quality/checkstyle-result.xml 2>/dev/null | wc -l || echo "未找到报告") 个错误"
echo "- SpotBugs: $(grep -o "priority=\"1\"" reports/code-quality/spotbugsXml.xml 2>/dev/null | wc -l || echo "未找到报告") 个高优先级问题"
if [ -d "reports/code-quality/jacoco" ]; then
COVERAGE=$(grep -A 1 "lineRate" reports/code-quality/jacoco/jacoco.xml | tail -1 | sed 's/.*\(\([0-9]\+\.[0-9]\+\)\).*/\1/')
echo "- 测试覆盖率: ${COVERAGE}%"
else
echo "- 测试覆盖率: 未生成报告"
fi