菜单

构建工具和依赖管理

相关源文件

本文档涵盖了针对 Java 构建工具和依赖管理系统(主要关注 Maven 和 Gradle)的 gitignore 模式。这些模式通过排除不应提交到版本控制的构建产物、依赖缓存和工具特定配置文件,帮助开发人员维护整洁的代码库。

有关 Terraform 等基础设施即代码工具的信息,请参阅Terraform 与基础设施即代码。有关操作系统特定模式,请参阅操作系统特定模式

版本控制中的构建工具概述

构建工具在构建过程中会生成大量文件,这些文件通常应从版本控制中排除。其中包括

  1. 编译后的代码和构建输出
  2. 依赖缓存
  3. 工具特定配置备份
  4. 生成的元数据和日志
  5. IDE 集成文件

来源:Maven.gitignore1-17 Gradle.gitignore1-21

Maven

Maven 是一种流行的构建自动化和依赖管理工具,主要用于 Java 项目。其配置定义在项目对象模型 (POM) 文件中,通常命名为pom.xml

Maven 目录结构与忽略文件

主要忽略文件

模式描述行参考
target/包含所有编译输出和打包产物Maven.gitignore1
pom.xml.*Maven POM 文件的备份和临时版本Maven.gitignore2-5
release.properties发布过程中创建的属性文件Maven.gitignore6
dependency-reduced-pom.xml使用 Maven Shade 插件构建时生成Maven.gitignore7
buildNumber.properties由 buildnumber-maven-plugin 使用Maven.gitignore8
.mvn/timing.propertiesMaven 构建的性能指标Maven.gitignore9
.mvn/wrapper/maven-wrapper.jarMaven Wrapper 二进制文件(有特殊例外)Maven.gitignore10-11
.project, .classpathEclipse 集成文件Maven.gitignore13-17

来源:Maven.gitignore1-17

Maven Wrapper 例外

Maven Wrapper 文件提供了一种方法,以确保在构建项目时使用特定的 Maven 版本。.mvn/wrapper/maven-wrapper.jar 文件通常会被标准的 Java gitignore 模式(通常排除所有.jar 文件)忽略,但以下注释则将其作为例外处理:

# https://github.com/takari/maven-wrapper#usage-without-binary-jar
.mvn/wrapper/maven-wrapper.jar

来源:Maven.gitignore10-11

Gradle

Gradle 是一种支持多语言开发的构建自动化工具。它使用基于 Groovy 或 Kotlin 的 DSL 进行构建配置,而非 XML 配置文件。

Gradle 目录结构与忽略文件

主要忽略文件

模式描述行参考
.gradleGradle 的缓存目录,包含依赖项和其他缓存数据Gradle.gitignore1
**/build/项目中任何级别的构建输出目录Gradle.gitignore2
!src/**/build/防止忽略源代码中名为“build”的目录的例外规则Gradle.gitignore3
gradle-app.settingGradle GUI 的配置Gradle.gitignore6
.gradletasknamecache任务名称的缓存文件Gradle.gitignore15
.project, .classpathEclipse 集成文件Gradle.gitignore18-21

来源:Gradle.gitignore1-21

Gradle Wrapper 例外

与 Maven 类似,Gradle 也使用包装器系统来确保构建的一致性。gitignore 文件中包含特定例外,以确保包装器文件被纳入版本控制。

# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
!gradle-wrapper.jar

# Avoid ignore Gradle wrappper properties
!gradle-wrapper.properties

来源:Gradle.gitignore8-12

构建工具的通用模式

尽管 Maven 和 Gradle 在架构和操作上有所不同,但它们的 gitignore 文件中共享一些通用模式

IDE 集成考量

Maven 和 Gradle 的 gitignore 文件都包含 Eclipse 集成的模式

# Eclipse m2e generated files
# Eclipse Core
.project
# JDT-specific (Eclipse Java Development Tools)
.classpath

这些文件由 Eclipse 在导入 Maven 或 Gradle 项目时生成,不应提交,因为它们包含用户特定的路径信息。

来源:Maven.gitignore13-17 Gradle.gitignore17-21

构建目录结构比较

MavenGradle目的是否应忽略?
target/build/包含编译输出
src/src/包含源代码
不适用.gradle/本地 Gradle 缓存
.m2/repository/ (系统级).gradle/caches/依赖缓存
.mvn/wrapper/gradle/wrapper/工具包装器文件部分(有例外)

来源:Maven.gitignore1-11 Gradle.gitignore1-12

构建工具 Gitignore 模式的最佳实践

  1. 始终忽略构建输出:编译后的代码和打包产物可以重新生成,绝不应提交。
  2. 忽略本地配置:包含用户特定设置的文件应被排除。
  3. 对包装器文件进行例外处理:包含包装器文件以确保跨环境构建的一致性。
  4. 谨慎使用模式例外:注意使用! 模式来对更广泛的忽略规则进行例外处理。
  5. 为 gitignore 文件添加注释:两个示例都包含有用的注释,解释了某些模式背后的原理。

来源:Maven.gitignore1-17 Gradle.gitignore1-21

尽管本文档侧重于 Maven 和 Gradle,但类似原则也适用于其他构建工具,例如 Ant、SBT、Bazel 等。每个工具都会有

  1. 应被忽略的构建输出目录
  2. 不应提交的依赖缓存
  3. 工具特定配置文件
  4. 潜在的 IDE 集成文件

对于特定语言的构建工具,请参阅编程语言模板的文档,其中涵盖了各种语言的构建工具,例如 JavaScript 的 npm、Python 的 pip 等。