適用於 Java 的 Maven Spotless 插件
1. 概述
在本教程中,我們將探索 Maven Spotless 插件,並使用它在整個專案中強制實施一致的程式碼風格。最初,我們將使用最小的配置來分析原始程式碼並解決潛在的格式違規問題。之後,我們將逐步更新插件的配置以使用自訂規則並在特定的 Maven 階段執行這些檢查。
2. 入門
Maven Spotless Plugin 是一個在建置過程中自動格式化和強制執行跨各種程式語言的程式碼風格標準的工具。 Spotless 的入門非常簡單,我們需要做的就是在Spotless-maven-plugin中指定我們首選的程式設計格式。
讓我們先將外掛程式新增到pom.xml
並將其配置為使用Google Java 樣式:
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>2.43.0</version>
<configuration>
<java>
<googleJavaFormat/>
</java>
</configuration>
</plugin>
就是這樣!我們現在可以運行“ mvn spotless:check
”,該外掛程式將自動掃描我們的 Java 文件,並檢查我們是否使用了正確的格式。在控制台中,我們將看到已掃描文件的摘要,以及其中有多少文件失敗:
正如我們所看到的,如果插件發現至少一種格式違規,則建置將失敗。如果向下捲動,我們將看到偵測到的格式問題的表示。在這種情況下,我們的程式碼使用製表符,而 Google 規範要求兩個空格的縮排區塊:
此外,當我們執行指令「 mvn spotless::apply”
時,Spotless 會自動修復所有違規行為。讓我們使用命令來糾正違規行為,並將原始程式碼與遠端分支進行比較:
我們可以注意到,我們的原始碼格式正確,並且現在符合 Google Java 標準。
3. 自訂格式規則
到目前為止,我們使用 Spotless 插件的最小配置驗證了我們的程式碼庫使用了一致的格式。但是,我們可以使用Eclipse Formatter Profile
來設定我們自己的格式化規則。此設定檔是一個具有標準化結構的 XML 文件,與各種 IDE 和格式化插件相容。
讓我們將這些文件之一添加到專案的根資料夾中,我們將其命名為baeldung-style.xml
:
<profiles version="21">
<profile kind="CodeFormatterProfile" name="baeldung-style" version="21">
<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
<!-- other settings... -->
<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
</profile>
</profiles>
現在,讓我們更新pom.xml
並添加自訂格式化程式設定檔。我們將刪除<googleJavaFormat/>
步驟並將其替換為使用自訂 XML 檔案中的設定的<eclipse>
格式化程式:
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>2.43.0</version>
<configuration>
<java>
<eclipse>
<file>${project.basedir}/baeldung-style.xml</file>
</eclipse>
</java>
</configuration>
</plugin>
就是這樣!現在我們可以重新執行「 mvn spotless:check
」以確保專案遵循我們的自訂約定。
4. 附加步驟
除了驗證程式碼格式是否正確之外,我們還可以使用 Spotless 進行靜態分析並套用小的改進。在外掛程式配置中指定首選程式碼樣式後,我們可以執行其他步驟:
<java>
<eclipse>
<file>${project.basedir}/baeldung-style.xml</file>
</eclipse>
<licenseHeader>
<content>/* (C)$YEAR */</content>
</licenseHeader>
<importOrder/>
<removeUnusedImports />
<formatAnnotations />
</java>
當我們執行spotless:apply,
每個「步驟」都會驗證並執行特定的規則:
-
<licenseHeader>
檢查文件是否包含正確的版權標頭, -
<importOrder>
和<removeUnusedImports>
確保導入相關並遵循一致的順序, -
<formatAnnotations>
確保類型註解與其描述的欄位位於同一行;
如果我們運行該命令,我們可以期望所有這些更改都會自動套用:
5. 綁定到 Maven 階段
到目前為止,我們僅透過直接觸發maven目標「 spotless:check
」和「 spotless:apply
」來使用Spotless外掛程式。不過,我們也可以將這些目標綁定到特定的 Maven 階段。階段是 Maven 建置生命週期中的預定義階段,它們會以特定順序執行任務以自動化軟體建置流程。
例如,「打包」階段將編譯的程式碼和其他資源捆綁為可分發的格式,例如「Jar」或「War」檔案。讓我們使用這個階段與 Spotless 外掛程式整合並執行「 spotless:check
」:
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>2.43.0</version>
<configuration>
<java>
<!-- formatter and additional steps -->
</java>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
</plugin>
因此,Spotless 的check
目標將在 Maven 的package
階段自動執行。換句話說,如果原始程式碼不遵守指定的格式和風格指南,我們可以透過導致 Maven 建置失敗來強制執行一致的程式碼風格。
六,結論
在本文中,我們了解了 Maven Spotless 插件,最初使用它來強制執行 Google 的 Java 格式,以便對我們的專案進行靜態程式碼分析。然後,我們使用自訂格式化規則轉換為自訂 Eclipse Formatter Profile。
除了格式化之外,我們還探索了其他可以改進程式碼並執行小型重構的可配置步驟。最後,我們討論了將 Spotless 目標綁定到特定的 Maven 階段,以確保在整個建置過程中強制執行一致的程式碼風格。
與往常一樣,程式碼範例可以在 GitHub 上找到。