Java é¢æäº¤é©åæå | AIçæåç¿»è¯
é®é¢ï¼ å¦ä½å¨ Java 项ç®ä¸ä½¿ç¨ pre-commit hooks ââ ä½¿ç¨ Spotless æ Checkstyle ââ Java æ¯å¦æ¯ææ¤ç±» pre-commit å·¥å ·ï¼
åçï¼
æ¯çï¼Java å®å ¨æ¯æ Pre-Commit Hooks
Java é¡¹ç®æ¯æ pre-commit hooksï¼ä½æ¹æ³ä¸ Python/Node 项ç®ä¸åãç±äº Java ä½¿ç¨ Maven æ Gradle ä½ä¸ºæå»ºå·¥å ·ï¼pre-commit hooks é常è°ç¨ Maven/Gradle goalsï¼è䏿¯è¿è¡ç¬ç«çäºè¿å¶æä»¶ãä¸»è¦æä¸¤ç§çç¥ï¼
- çç¥ A ââ 使ç¨
pre-commitPython æ¡æ¶ä¸è°ç¨ Maven/Gradle ç shell-script hooks - çç¥ B ââ ä½¿ç¨ Maven æä»¶ç´æ¥å®è£
git hooksï¼æ é
pre-commitæ¡æ¶ï¼
å·¥å ·æ¯è¾ï¼Spotless ä¸ Checkstyle
两è äºè¡¥ââSpotless å¤çæ ¼å¼åï¼è Checkstyle å¼ºå¶æ§è¡ç¼ç æåï¼å¦å½åè§èã大æ¬å·é£æ ¼å Javadoc è¦æ±ãå°ä¸¤è ç»å使ç¨å¯å®ç°å®æ´çèªå¨å飿 ¼å¼ºå¶æ§è¡ã
æ¹æ³ 1ï¼ä½¿ç¨ .pre-commit-config.yamlï¼æ¨èç¨äºè·¨è¯è¨å¢éï¼
æ¨å¯ä»¥ä½¿ç¨æ åç pre-commit æ¡æ¶ä¸èªå®ä¹ shell hooksï¼è¿äº hooks è°ç¨ Maven goals æ¥å¤ç Spotless å Checkstyleï¼
æ¥éª¤ 1 ââ å建 hook shell èæ¬
# hooks/spotless-hook.sh
#!/bin/bash
echo "Running Spotless format check..."
mvn spotless:check
if [ $? -ne 0 ]; then
echo "Formatting issues found. Run: mvn spotless:apply"
exit 1
fi
# hooks/checkstyle-hook.sh
#!/bin/bash
echo "Running Checkstyle..."
mvn checkstyle:check
if [ $? -ne 0 ]; then
echo "Checkstyle violations found. Commit aborted."
exit 1
fi
使å®ä»¬å¯æ§è¡ï¼
chmod +x hooks/spotless-hook.sh hooks/checkstyle-hook.sh
æ¥éª¤ 2 ââ .pre-commit-config.yaml
repos:
- repo: local
hooks:
- id: spotless-format-check
name: Spotless Format Check
entry: hooks/spotless-hook.sh
language: script
files: \.java$ # only trigger on .java files
- id: checkstyle
name: Checkstyle
entry: hooks/checkstyle-hook.sh
language: script
files: \.java$
æ¥éª¤ 3 ââ å®è£ å¹¶è¿è¡
pip install pre-commit
pre-commit install
pre-commit run --all-files # test manually
æ¹æ³ 2ï¼éè¿ Docker Hook ä½¿ç¨ Checkstyleï¼æ é Maven å è£ å¨ï¼
æä¸ä¸ªåºäº Docker ç pre-commit hook ç¨äº Checkstyleï¼å®ä¼èªå¨ä¸è½½ Checkstyle JARï¼
repos:
- repo: https://github.com/HotSprings-GmbH/pre-commit-checkstyle
rev: "" # pin a commit hash
hooks:
- id: checkstyle
args:
- "10.12.5" # checkstyle version
- "-c=checkstyle.xml" # your rules file
stages: [commit]
å°
.pre-commit/æ·»å å°æ¨ç.gitignoreï¼å 为 hook ä¼å° Checkstyle JAR ç¼åå¨å·¥ä½ç®å½ä¸ç.pre-commitæä»¶å¤¹ã
æ¹æ³ 3ï¼çº¯ Mavenï¼æ é pre-commit æ¡æ¶ï¼
ä½¿ç¨ git-build-hook-maven-pluginï¼æ¨å¯ä»¥å¨ pom.xml ä¸å®å
¨é
ç½® hook ââ æ éå¤é¨å·¥å
·ï¼
pom.xml é
ç½®
<build>
<plugins>
<!-- Spotless: formatter -->
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>2.40.0</version>
<configuration>
<java>
<includes>
<include>src/main/java/**/*.java</include>
<include>src/test/java/**/*.java</include>
</includes>
<googleJavaFormat>
<version>1.16.0</version>
<style>GOOGLE</style>
</googleJavaFormat>
<removeUnusedImports/>
</java>
</configuration>
</plugin>
<!-- git-build-hook: installs the pre-commit hook automatically -->
<plugin>
<groupId>com.rudikershaw.gitbuildhook</groupId>
<artifactId>git-build-hook-maven-plugin</artifactId>
<version>3.4.1</version>
<configuration>
<preCommit>mvn spotless:apply checkstyle:check</preCommit>
</configuration>
<executions>
<execution>
<goals><goal>install</goal></goals>
<phase>initialize</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
å½ä»»ä½å¼åè
è¿è¡ mvn install æ¶ï¼git-build-hook æä»¶ä¼èªå¨å° pre-commit hook å®è£
å°ä»ä»¬ç .git/hooks ç®å½ ââ æ éæå¨æ¥éª¤ã
Checkstyle checkstyle.xml 示ä¾
ä¸ä¸ªæå°åç checkstyle.xmlï¼å¼ºå¶æ§è¡å¸¸è§ç Java è§èï¼
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<module name="Checker">
<module name="FileTabCharacter"/>
<module name="TreeWalker">
<module name="UnusedImports"/>
<module name="TypeName"/> <!-- Classes must be PascalCase -->
<module name="MethodName"/> <!-- Methods must be camelCase -->
<module name="PackageName"/>
</module>
</module>
å¨ GitHub ä¸å¼ºå¶æ§è¡ï¼æå¡å¨ç«¯ï¼
ç±äº hooks æ¯æ¬å°çï¼è¯·æ·»å GitHub Actions workflow ä½ä¸ºå®å ¨ç½ï¼
# .github/workflows/code-quality.yml
name: Code Quality
on: [pull_request, push]
jobs:
quality:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Run Spotless Check
run: mvn spotless:check
- name: Run Checkstyle
run: mvn checkstyle:check
æ»ç»ï¼ä½¿ç¨åªç§æ¹æ³ï¼
åèèµæï¼
- Spring Boot with Spotless and Git Pre-commit Hooks (DEV.to)
- pre-commit-hooks-for-java (GitHub)
- pre-commit-checkstyle Docker hook (GitHub)
- Enforcing Code Quality with Checkstyle and Git Pre-Commit Hooks (Medium)
- Apply Spotless formatting with Git pre-commit hook (Medium)
