贡献指南
Spring Cloud 采用非限制性 Apache 2.0 许可证发布,并遵循非常标准的 Github 开发流程,使用 Github 的问题追踪器来管理问题,并将拉取请求合并到主分支。如果您想贡献任何内容,即使是很小的改动,也请不要犹豫,但请遵循以下指南。
签署贡献者许可协议
在我们接受任何重要的补丁或拉取请求之前,我们需要您签署贡献者许可协议。签署贡献者协议不会授予任何人对主仓库的提交权限,但这意味着我们可以接受您的贡献,如果您这样做,您将获得作者署名。活跃的贡献者可能会被邀请加入核心团队,并被授予合并拉取请求的能力。
行为准则
此项目遵守贡献者公约行为准则。参与此项目即表示您同意遵守此准则。请将不可接受的行为报告给[email protected]。
代码规范和维护
这些都不是拉取请求的必要条件,但它们都会有所帮助。这些也可以在原始拉取请求之后,但在合并之前添加。
-
使用 Spring Framework 代码格式规范。如果您使用 Eclipse,可以使用来自Spring Cloud Build项目的
eclipse-code-formatter.xml
文件导入格式化程序设置。如果使用 IntelliJ,可以使用Eclipse Code Formatter 插件导入相同的文件。 -
确保所有新的
.java
文件都包含一个简单的Javadoc类注释,至少包含一个@author
标签来标识您,最好还包含一段关于该类的用途的描述。 -
将ASF许可证头注释添加到所有新的
.java
文件(从项目中现有文件中复制)。 -
如果您对
.java
文件进行了实质性修改(超过简单的代码美化),请将自己添加为@author
。 -
添加一些Javadoc,如果您更改了命名空间,则添加一些XSD文档元素。
-
一些单元测试也会非常有帮助——总得有人去做。
-
如果没有人使用您的分支,请将其重新定位到当前的主分支(或主项目中的其他目标分支)。
-
编写提交信息时,请遵循这些约定,如果您正在修复现有问题,请在提交信息末尾添加
Fixes gh-XXXX
(其中XXXX是问题编号)。
Checkstyle
Spring Cloud Build 带有一套 Checkstyle 规则。您可以在spring-cloud-build-tools
模块中找到它们。该模块下最重要的文件是:
└── src ├── checkstyle │ └── checkstyle-suppressions.xml (3) └── main └── resources ├── checkstyle-header.txt (2) └── checkstyle.xml (1)
1 | 默认 Checkstyle 规则 |
2 | 文件头设置 |
3 | 默认抑制规则 |
Checkstyle 配置
Checkstyle 规则**默认情况下是禁用的**。要将 checkstyle 添加到您的项目中,只需定义以下属性和插件。
<properties> <maven-checkstyle-plugin.failsOnError>true</maven-checkstyle-plugin.failsOnError> (1) <maven-checkstyle-plugin.failsOnViolation>true </maven-checkstyle-plugin.failsOnViolation> (2) <maven-checkstyle-plugin.includeTestSourceDirectory>true </maven-checkstyle-plugin.includeTestSourceDirectory> (3) </properties> <build> <plugins> <plugin> (4) <groupId>io.spring.javaformat</groupId> <artifactId>spring-javaformat-maven-plugin</artifactId> </plugin> <plugin> (5) <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-plugin</artifactId> </plugin> </plugins> <reporting> <plugins> <plugin> (5) <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-plugin</artifactId> </plugin> </plugins> </reporting> </build>
1 | Checkstyle 错误导致构建失败 |
2 | Checkstyle 违规导致构建失败 |
3 | Checkstyle 也分析测试源代码 |
4 | 添加 Spring Java Format 插件,它将重新格式化您的代码以通过大多数 Checkstyle 格式化规则 |
5 | 将 checkstyle 插件添加到您的构建和报告阶段 |
如果您需要抑制某些规则(例如,行长需要更长),则您只需在${project.root}/src/checkstyle/checkstyle-suppressions.xml
下定义一个包含抑制规则的文件即可。示例:
<?xml version="1.0"?> <!DOCTYPE suppressions PUBLIC "-//Puppy Crawl//DTD Suppressions 1.1//EN" "https://www.puppycrawl.com/dtds/suppressions_1_1.dtd"> <suppressions> <suppress files=".*ConfigServerApplication\.java" checks="HideUtilityClassConstructor"/> <suppress files=".*ConfigClientWatch\.java" checks="LineLengthCheck"/> </suppressions>
建议将${spring-cloud-build.rootFolder}/.editorconfig
和${spring-cloud-build.rootFolder}/.springformat
复制到您的项目中。这样,一些默认的格式化规则将被应用。您可以运行以下脚本:
$ curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/.editorconfig -o .editorconfig
$ touch .springformat
IDE 设置
Intellij IDEA
为了设置 Intellij,您应该导入我们的编码约定、检查配置文件并设置 checkstyle 插件。以下文件可以在Spring Cloud Build项目中找到。
└── src ├── checkstyle │ └── checkstyle-suppressions.xml (3) └── main └── resources ├── checkstyle-header.txt (2) ├── checkstyle.xml (1) └── intellij ├── Intellij_Project_Defaults.xml (4) └── Intellij_Spring_Boot_Java_Conventions.xml (5)
1 | 默认 Checkstyle 规则 |
2 | 文件头设置 |
3 | 默认抑制规则 |
4 | Intellij 的项目默认设置,应用大多数 Checkstyle 规则 |
5 | Intellij 的项目样式约定,应用大多数 Checkstyle 规则 |
转到文件
→设置
→编辑器
→代码样式
。单击“方案
”部分旁边的图标。在那里,单击“导入方案
”值并选择“Intellij IDEA 代码样式 XML
”选项。导入spring-cloud-build-tools/src/main/resources/intellij/Intellij_Spring_Boot_Java_Conventions.xml
文件。
转到文件
→设置
→编辑器
→检查
。单击“配置文件
”部分旁边的图标。在那里,单击“导入配置文件
”并导入spring-cloud-build-tools/src/main/resources/intellij/Intellij_Project_Defaults.xml
文件。
要使 Intellij 使用 Checkstyle,您必须安装Checkstyle
插件。建议还安装Assertions2Assertj
来自动转换 JUnit 断言
转到文件
→设置
→其他设置
→Checkstyle
。单击“配置文件
”部分中的“+
”图标。在那里,您必须定义应从中选择 checkstyle 规则的位置。在上图中,我们从克隆的 Spring Cloud Build 存储库中选择了规则。但是,您可以指向 Spring Cloud Build 的 GitHub 存储库(例如,对于checkstyle.xml
:raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-build-tools/src/main/resources/checkstyle.xml
)。我们需要提供以下变量:
-
checkstyle.header.file
- 请将其指向 Spring Cloud Build 的spring-cloud-build-tools/src/main/resources/checkstyle-header.txt
文件,该文件可以在您的克隆仓库中找到,也可以通过raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-build-tools/src/main/resources/checkstyle-header.txt
URL 指向。 -
checkstyle.suppressions.file
- 默认抑制规则。请将其指向 Spring Cloud Build 的spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml
文件,该文件可以在您的克隆仓库中找到,也可以通过raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml
URL 指向。 -
checkstyle.additional.suppressions.file
- 此变量对应于本地项目中的抑制规则。例如,您正在处理spring-cloud-contract
项目。则应指向project-root/src/checkstyle/checkstyle-suppressions.xml
文件夹。spring-cloud-contract
的示例路径为:/home/username/spring-cloud-contract/src/checkstyle/checkstyle-suppressions.xml
。
请记住将扫描范围 设置为所有源代码 ,因为我们将 Checkstyle 规则应用于生产和测试源代码。 |
重复查找器
Spring Cloud Build 自带basepom:duplicate-finder-maven-plugin
插件,用于标记 Java 类路径上重复和冲突的类和资源。
重复查找器配置
重复查找器**默认启用**,并在 Maven 构建的verify
阶段运行,但只有在项目的pom.xml
文件的build
部分添加了duplicate-finder-maven-plugin
插件后,它才会在您的项目中生效。
<build>
<plugins>
<plugin>
<groupId>org.basepom.maven</groupId>
<artifactId>duplicate-finder-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
对于其他属性,我们已设置如插件文档中列出的默认值。
您可以通过设置以duplicate-finder-maven-plugin
为前缀的属性值来轻松覆盖它们。例如,将duplicate-finder-maven-plugin.skip
设置为true
,以便跳过构建中的重复检查。
如果您需要添加ignoredClassPatterns
或ignoredResourcePatterns
到您的设置中,请确保将它们添加到项目插件配置部分。
<build>
<plugins>
<plugin>
<groupId>org.basepom.maven</groupId>
<artifactId>duplicate-finder-maven-plugin</artifactId>
<configuration>
<ignoredClassPatterns>
<ignoredClassPattern>org.joda.time.base.BaseDateTime</ignoredClassPattern>
<ignoredClassPattern>.*module-info</ignoredClassPattern>
</ignoredClassPatterns>
<ignoredResourcePatterns>
<ignoredResourcePattern>changelog.txt</ignoredResourcePattern>
</ignoredResourcePatterns>
</configuration>
</plugin>
</plugins>
</build>