團(tuán)隊(duì)代碼風(fēng)格混亂?Spotless 幫你搞定!
1. 前言
大家好,我是飄渺。在今天的DDD與微服務(wù)系列文章中,我們將繼續(xù)探討一個(gè)關(guān)鍵主題:如何通過統(tǒng)一的代碼風(fēng)格來提升團(tuán)隊(duì)協(xié)作效率。
在當(dāng)今流行的微服務(wù)架構(gòu)中,通常涉及多個(gè)開發(fā)團(tuán)隊(duì)的協(xié)作。由于團(tuán)隊(duì)規(guī)模龐大,不同開發(fā)者可能采用不同的編碼風(fēng)格,導(dǎo)致代碼不一致、難以閱讀。在這種情況下,代碼格式化工具變得尤為重要。Spotless 就是這樣一款工具,它不僅能夠自動(dòng)進(jìn)行代碼格式化,還能夠確保代碼始終符合預(yù)定的標(biāo)準(zhǔn)。通過保持一致的代碼風(fēng)格,Spotless 提升了代碼的可讀性和維護(hù)性,增強(qiáng)了團(tuán)隊(duì)合作效率,無論是簡(jiǎn)化代碼審查、提高代碼質(zhì)量,還是幫助新成員快速融入項(xiàng)目。
在本文中,我們將重點(diǎn)探討在 DailyMart 項(xiàng)目中如何借助 Spotless 實(shí)現(xiàn)整個(gè)項(xiàng)目的代碼風(fēng)格統(tǒng)一。
2. 使用指南
Spotless 的使用非常簡(jiǎn)單。以下是官方示例代碼:
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
通過執(zhí)行 mvn spotless:check 命令,您可以檢查項(xiàng)目代碼是否存在格式問題。接著使用 mvn spotless:apply 進(jìn)行代碼格式化。再次運(yùn)行檢查命令時(shí),格式錯(cuò)誤將會(huì)消失。
3. 項(xiàng)目實(shí)戰(zhàn)
在 DailyMart 項(xiàng)目中,我使用 Spotless 實(shí)現(xiàn)了兩個(gè)關(guān)鍵方面的統(tǒng)一:Java 文件的 licenseHeader 和 Java 代碼的格式化。
Spotless 提供了多種 Java 代碼格式化方式,如 googleJavaFormat、eclipse、prettier 等?;诙ㄖ苹目紤],我選擇了使用 eclipse 進(jìn)行 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 插件引入項(xiàng)目,并在配置中指定了 Java 代碼風(fēng)格文件和頭文件的路徑。
3.2 創(chuàng)建頭文件
在 dev-support 文件夾中創(chuàng)建頭文件 license-header,內(nèi)容如下:
/*
* DailyMart is a microservice-based e-commerce project implemented
* with Domain-Driven Design (DDD).
* Copyright (C) 2023 Java日知錄
*
* ...
*/
這樣,當(dāng)使用 Spotless 進(jìn)行代碼格式化時(shí),會(huì)為所有代碼文件添加這段頭信息。請(qǐng)注意,在頭文件后面留一個(gè)空行,以確保 licenseHeader 與 Java 代碼的 package 之間有足夠的間隔,以保持代碼的美觀性。
3.3 創(chuàng)建代碼格式文件
在 dev-support 中創(chuàng)建 dailymart_spotless_formatter.xml 文件,用于指定 Eclipse 代碼格式化的設(shè)置。以下是一個(gè)示例配置:
<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>
完整配置請(qǐng)參考源代碼文件。您可以根據(jù)項(xiàng)目需要靈活調(diào)整代碼風(fēng)格。同時(shí),我還提供了一個(gè)名為 eclipse-java-google-style.xml 的樣例配置文件,可以在以下地址找到:https://github.com/google/styleguide/blob/gh-pages/eclipse-java-google-style.xml
3.4 執(zhí)行代碼格式化
經(jīng)過上述步驟,我們就可以執(zhí)行以下命令來檢查 Java 代碼是否符合規(guī)范并進(jìn)行格式化:
# 查看哪些代碼不符合代碼格式
mvn spotless:check
# 代碼格式化
mvn spotless:apply
當(dāng)然,我們也可以直接在 IDEA 中使用 Maven 插件來執(zhí)行這些操作。只需點(diǎn)擊一下,即可完成整個(gè)過程。
圖片
3.5 將格式化綁定到 Maven 生命周期
在 DailyMart 實(shí)際應(yīng)用中,我選擇將 Spotless 格式化操作綁定到 compile 階段,這樣當(dāng)執(zhí)行 mvn install 時(shí),代碼會(huì)自動(dòng)進(jìn)行格式化。
以下是在 POM 文件中配置的相關(guān)部分:
<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插件
如果開發(fā)者在編寫代碼時(shí)想要檢查單個(gè)文件是否符合規(guī)范,執(zhí)行 mvn spotless:check 或 mvn spotless:apply 或許稍顯繁瑣,因?yàn)槟J(rèn)格式化范圍是整個(gè)項(xiàng)目。
但是,我們可以借助 IDEA 的插件 Adapter for Eclipse Code Formatter 來實(shí)現(xiàn)單個(gè)文件的格式化。只需將我們的自定義代碼文件替換原文件即可。
在IDEA中安裝 Adapter for Eclipse Code Formatter 插件
圖片
修改代碼格式化文件,將自定義的代碼風(fēng)格導(dǎo)入。
圖片
這樣,您就可以使用 IDEA 的快捷鍵對(duì)單個(gè)文件進(jìn)行代碼格式化,同時(shí)使用的是您自定義的代碼風(fēng)格。
以上就是使用 Spotless 統(tǒng)一代碼風(fēng)格的實(shí)踐方法。通過這些步驟,你也可以輕松地在團(tuán)隊(duì)中實(shí)施統(tǒng)一的代碼規(guī)范,從而提高代碼質(zhì)量和團(tuán)隊(duì)協(xié)作效率。