十一弹:团队代码风格混乱?Spotless 来帮你收拾残局!

1. 前言

大家好,我是飘渺。在今天的DDD与微服务系列文章中,我们将继续探讨一个关键主题:如何通过统一的代码风格来提升团队协作效率。

在当今流行的微服务架构中,通常涉及多个开发团队的协作。由于团队规模庞大,不同开发者可能采用不同的编码风格,导致代码不一致、难以阅读。在这种情况下,代码格式化工具变得尤为重要。Spotless 就是这样一款工具,它不仅能够自动进行代码格式化,还能够确保代码始终符合预定的标准。通过保持一致的代码风格,Spotless 提升了代码的可读性和维护性,增强了团队合作效率,无论是简化代码审查、提高代码质量,还是帮助新成员快速融入项目。

在本文中,我们将重点探讨在 DailyMart 项目中如何借助 Spotless 实现整个项目的代码风格统一。

2. 使用指南

Spotless 的使用非常简单。以下是官方示例代码:

sh 复制代码
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文件中引入插件依赖

xml 复制代码
<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,内容如下:

markdown 复制代码
/*
 * 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 代码格式化的设置。以下是一个示例配置:

xml 复制代码
<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 的样例配置文件,可以在以下地址找到:

github.com/google/styl...

3.4 执行代码格式化

经过上述步骤,我们就可以执行以下命令来检查 Java 代码是否符合规范并进行格式化:

sh 复制代码
# 查看哪些代码不符合代码格式
mvn spotless:check

# 代码格式化
mvn spotless:apply

当然,我们也可以直接在 IDEA 中使用 Maven 插件来执行这些操作。只需点击一下,即可完成整个过程。

3.5 将格式化绑定到 Maven 生命周期

在 DailyMart 实际应用中,我选择将 Spotless 格式化操作绑定到 compile 阶段,这样当执行 mvn install 时,代码会自动进行格式化。

以下是在 POM 文件中配置的相关部分:

xml 复制代码
<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:checkmvn spotless:apply 或许稍显繁琐,因为默认格式化范围是整个项目。

但是,我们可以借助 IDEA 的插件 Adapter for Eclipse Code Formatter 来实现单个文件的格式化。只需将我们的自定义代码文件替换原文件即可。

  1. 在IDEA中安装 Adapter for Eclipse Code Formatter 插件
  1. 修改代码格式化文件,将自定义的代码风格导入。

这样,您就可以使用 IDEA 的快捷键对单个文件进行代码格式化,同时使用的是您自定义的代码风格。

以上就是使用 Spotless 统一代码风格的实践方法。通过这些步骤,你也可以轻松地在团队中实施统一的代码规范,从而提高代码质量和团队协作效率。

DDD&微服务系列源码已经上传至GitHub,如果需要获取源码地址,请关注公号 java日知录 并回复关键字 DDD 即可!

相关推荐
KK溜了溜了2 小时前
JAVA-springboot log日志
java·spring boot·logback
我命由我123453 小时前
Spring Boot 项目集成 Redis 问题:RedisTemplate 多余空格问题
java·开发语言·spring boot·redis·后端·java-ee·intellij-idea
面朝大海,春不暖,花不开3 小时前
Spring Boot消息系统开发指南
java·spring boot·后端
hshpy3 小时前
setting up Activiti BPMN Workflow Engine with Spring Boot
数据库·spring boot·后端
jay神3 小时前
基于Springboot的宠物领养系统
java·spring boot·后端·宠物·软件设计与开发
不知几秋4 小时前
Spring Boot
java·前端·spring boot
howard20055 小时前
5.4.2 Spring Boot整合Redis
spring boot·整合redis
TracyCoder1235 小时前
接口限频算法:漏桶算法、令牌桶算法、滑动窗口算法
spring boot·spring·限流
饮长安千年月5 小时前
JavaSec-SpringBoot框架
java·spring boot·后端·计算机网络·安全·web安全·网络安全
考虑考虑6 小时前
Jpa中的@ManyToMany实现增删
spring boot·后端·spring