團隊代碼風格混亂?Spotless 幫你搞定!
1. 前言
大家好,我是飄渺。在今天的DDD與微服務系列文章中,我們將繼續探討一個關鍵主題:如何通過統一的代碼風格來提升團隊協作效率。
在當今流行的微服務架構中,通常涉及多個開發團隊的協作。由于團隊規模龐大,不同開發者可能采用不同的編碼風格,導致代碼不一致、難以閱讀。在這種情況下,代碼格式化工具變得尤為重要。Spotless 就是這樣一款工具,它不僅能夠自動進行代碼格式化,還能夠確保代碼始終符合預定的標準。通過保持一致的代碼風格,Spotless 提升了代碼的可讀性和維護性,增強了團隊合作效率,無論是簡化代碼審查、提高代碼質量,還是幫助新成員快速融入項目。
在本文中,我們將重點探討在 DailyMart 項目中如何借助 Spotless 實現整個項目的代碼風格統一。
2. 使用指南
Spotless 的使用非常簡單。以下是官方示例代碼:
user@machine repo % mvn spotless:check
[ERROR] > The following files had format violations:
[ERROR] src\main\java\com\diffplug\gradle\spotless\FormatExtension.java
[ERROR] -\t\t····if·(targets.length·==·0)·{
[ERROR] +\t\tif·(targets.length·==·0)·{
[ERROR] Run 'mvn spotless:apply' to fix these violations.
user@machine repo % mvn spotless:apply
[INFO] BUILD SUCCESS
user@machine repo % mvn spotless:check
[INFO] BUILD SUCCESS
通過執行 mvn spotless:check 命令,您可以檢查項目代碼是否存在格式問題。接著使用 mvn spotless:apply 進行代碼格式化。再次運行檢查命令時,格式錯誤將會消失。
3. 項目實戰
在 DailyMart 項目中,我使用 Spotless 實現了兩個關鍵方面的統一:Java 文件的 licenseHeader 和 Java 代碼的格式化。
Spotless 提供了多種 Java 代碼格式化方式,如 googleJavaFormat、eclipse、prettier 等。基于定制化的考慮,我選擇了使用 eclipse 進行 Java 代碼格式化。
3.1 在父POM文件中引入插件依賴
<build>
<plugins>
<!--此插件用于格式化代碼,mvn spotless:check mvn spotless:apply -->
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>2.22.1</version>
<configuration>
<java>
<eclipse>
<file>dev-support/dailymart_spotless_formatter.xml</file>
</eclipse>
<licenseHeader>
<file>dev-support/license-header</file>
</licenseHeader>
</java>
</configuration>
</plugin>
</plugins>
</build>
這段代碼將 Spotless 插件引入項目,并在配置中指定了 Java 代碼風格文件和頭文件的路徑。
3.2 創建頭文件
在 dev-support 文件夾中創建頭文件 license-header,內容如下:
/*
* DailyMart is a microservice-based e-commerce project implemented
* with Domain-Driven Design (DDD).
* Copyright (C) 2023 Java日知錄
*
* ...
*/
這樣,當使用 Spotless 進行代碼格式化時,會為所有代碼文件添加這段頭信息。請注意,在頭文件后面留一個空行,以確保 licenseHeader 與 Java 代碼的 package 之間有足夠的間隔,以保持代碼的美觀性。
3.3 創建代碼格式文件
在 dev-support 中創建 dailymart_spotless_formatter.xml 文件,用于指定 Eclipse 代碼格式化的設置。以下是一個示例配置:
<profiles version="13">
<profile kind="CodeFormatterProfile" name="DailyMart Code Style" version="13">
<setting id="org.eclipse.jdt.core.compiler.source" value="1.8" />
<setting id="org.eclipse.jdt.core.compiler.compliance" value="1.8" />
<setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.8" />
<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="true" />
<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4" />
<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="200" />
<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="200" />
<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space" />
<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="1" />
...
</proofile>
</profiles>
完整配置請參考源代碼文件。您可以根據項目需要靈活調整代碼風格。同時,我還提供了一個名為 eclipse-java-google-style.xml 的樣例配置文件,可以在以下地址找到:https://github.com/google/styleguide/blob/gh-pages/eclipse-java-google-style.xml
3.4 執行代碼格式化
經過上述步驟,我們就可以執行以下命令來檢查 Java 代碼是否符合規范并進行格式化:
# 查看哪些代碼不符合代碼格式
mvn spotless:check
# 代碼格式化
mvn spotless:apply
當然,我們也可以直接在 IDEA 中使用 Maven 插件來執行這些操作。只需點擊一下,即可完成整個過程。
圖片
3.5 將格式化綁定到 Maven 生命周期
在 DailyMart 實際應用中,我選擇將 Spotless 格式化操作綁定到 compile 階段,這樣當執行 mvn install 時,代碼會自動進行格式化。
以下是在 POM 文件中配置的相關部分:
<build>
<plugins>
<!--此插件用于格式化代碼,mvn spotless:check mvn spotless:apply -->
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>${spotless-maven-plugin.version}</version>
<configuration>
<java>
<eclipse>
<file>dev-support/dailymart_spotless_formatter.xml</file>
</eclipse>
<licenseHeader>
<file>dev-support/license-header</file>
</licenseHeader>
</java>
</configuration>
<executions>
<execution>
<goals>
<goal>apply</goal>
</goals>
<phase>compile</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
3.6 集成IDEA插件
如果開發者在編寫代碼時想要檢查單個文件是否符合規范,執行 mvn spotless:check 或 mvn spotless:apply 或許稍顯繁瑣,因為默認格式化范圍是整個項目。
但是,我們可以借助 IDEA 的插件 Adapter for Eclipse Code Formatter 來實現單個文件的格式化。只需將我們的自定義代碼文件替換原文件即可。
在IDEA中安裝 Adapter for Eclipse Code Formatter 插件
圖片
修改代碼格式化文件,將自定義的代碼風格導入。
圖片
這樣,您就可以使用 IDEA 的快捷鍵對單個文件進行代碼格式化,同時使用的是您自定義的代碼風格。
以上就是使用 Spotless 統一代碼風格的實踐方法。通過這些步驟,你也可以輕松地在團隊中實施統一的代碼規范,從而提高代碼質量和團隊協作效率。