gradle plugin과git hook을 이용한 자동화 코드 포맷

1713 단어
속담에 우리 종족이 아니면 그 마음이 반드시 다르다고 한다.소프트웨어 프로젝트의 개발 과정에서 전체 팀은 절대로 동상이몽이독해서는 안 되기 때문에 코드 규범을 통일하는 것도 매우 중요하다.
좋은 코드 규범은 코드의 가독성을 증가시켜 코드의 유지보수성을 높일 수 있다.이 동시에 통일된 코드 규범은 불필요한 번거로움을 줄일 수 있다. 예를 들어 한 사람이 두 개의 빈칸을 축소하는 습관이 있고 다른 사람이 네 개의 빈칸을 설정했다. 만약에 두 번째 사람이 첫 번째 사람의 일부 코드만 수정했지만 이때 IDE가 포맷을 했다. 버전 제어의 diff 도구는 전체 코드 파일을 수정했다고 생각하고 온몸을 움직인다. 풀을 잡고 뱀을 놀라 허풍을 떨지 않을 수 없다.
코드 규범을 통일시키기 위해 우리가 가장 먼저 사용한 방법은 Checkstyle 플러그인을 사용하는 것이다. 코드가 규범에 부합되지 않으면 지속적인 통합 중인 마ven이나gradle의 구축 과정은 실패할 것이다.
그러나 자신이 원하지 않는 것은 남에게 베풀지 않고 코드에 대한 포맷 요구가 증가하면 반드시 대응하는 코드 포맷 도구를 제공해야 한다. 그렇지 않으면 인공 포맷 코드는 작업량을 증가시킬 수 있다. 예를 들어 매번 control+shift+f를 누르면 세 번의 버튼이 필요하다.코드를 자동으로 포맷하려면 eclipse에save actions를 설정할 수 있고 아이디어에는save actions 플러그인을 설치할 수 있으며 파일을 저장할 때 자동format을 할 수 있습니다.
우수한 코드의 설계 원칙은 중심화 설정과 문제를 신속하게 발견하는 것을 포함하지만 위의 방안은 두 가지 단점이 있다.
  • 각 팀 멤버는 자신의 IDE를 설정해야 하며 한 곳에서 통일적으로 관리할 수 없습니다.
  • 포맷되지 않은 코드도 제출되고 다음에 계속 집적될 때만 발견됩니다.

  • 이제 스팟 애플 플러그인을 찾았고git의 훅과 결합하여 이 두 문제를 해결했다.gradle에서 다음과 같이 설정합니다
    plugins {
        id 'java'
        id "com.diffplug.gradle.spotless" version "3.16.0"
    }
    
    group 'test'
    version '1.0-SNAPSHOT'
    
    sourceCompatibility = 1.8
    
    spotless {
        java {     
            googleJavaFormat()
            indentWithTabs(2)
            indentWithSpaces(4)
        }
    }
    def hook = new File("$rootProject.projectDir/.git/hooks/pre-commit")
    hook.text = """#!/bin/bash
    echo "will run nova code format"
    ./gradlew spotlessApply
    """
    
    

    우선gradle의 강력한 코드 능력을 빌려 프로젝트의git 디렉터리에 훅을 자동으로 만들고 이 훅은git의commit 이전에 gradlew spotlessApply를 실행하여 코드의 자동 포맷을 진행한다.모든 사람이 IDE를 설정하거나 포맷되지 않은 코드 커밋을 방지할 수 있습니다.

    좋은 웹페이지 즐겨찾기