在我们的日常工作中项目构建工具是必不可少的,常见的Java项目构建工具有Ant、Maven、Gradle,它们可以帮助我们自动完成一些项目构建工作,比如编译、打包、部署、依赖管理等,而且提供丰富的组件可以一个“命令”完成日常项目管理工作。大家常常会使用Maven来作为构建工具,但随着项目结构越来越复杂,配置会越来越繁杂,是时候尝试一种新的方式了~~~
什么是Gradle?
Gradle是源于Apache Ant和Apache Maven概念的项目自动化构建开源工具,它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置面向Java应用为主。当前其支持的语言暂时有Java、Groovy、Kotlin、Scala、Android、C++和Swift。
下面是Gradle和Apache Maven的一个比较,详见
Gradle入门
配置wrapper
推荐使用wrapper的方式配置Gradle环境,便于保持项目环境统一,在项目根目录下添加gradle/wrapper/gradle-wrapper.properties配置文件,详细配置见入门文档,配置内容如下:
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
gradle-wrapper.jar、gradlew、gradlew.bat文件可以通过命令自动生成,项目结构如下:
.
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
└── gradlew.bat
配置setting.gradle
settings.gradle与Settings实例对应,用来声明实例化和配置Project,可以用于多项目管理以及项目插件版本等配置,配置示例如下:
// include two projects, 'foo' and 'foo:bar'
// directories are inferred by replacing ':' with '/'
include 'foo:bar'
// include one project whose project dir does not match the logical project path
include 'baz'
project(':baz').projectDir = file('foo/baz')
// include many projects whose project dirs do not match the logical project paths
file('subprojects').eachDir { dir ->
include dir.name
project(":${dir.name}").projectDir = dir
}
项目结构如下:
.
├── settings.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
└── gradlew.bat
配置build.gradle
用于配置项目依赖、所需插件等,配置示例如下:
// 添加插件
plugins {
id 'groovy-gradle-plugin'
id 'maven-publish'
}
// 配置项目信息
group = 'com.myorg.conventions'
version = '1.0'
// 配置组件仓库
repositories {
gradlePluginPortal() // so that external plugins can be resolved in dependencies section
}
// 配置依赖
dependencies {
implementation 'gradle.plugin.com.github.spotbugs.snom:spotbugs-gradle-plugin:4.6.2'
testImplementation platform("org.spockframework:spock-bom:2.0-groovy-3.0")
testImplementation 'org.spockframework:spock-core'
testImplementation 'org.spockframework:spock-junit4'
testImplementation 'junit:junit:4.13.1'
}
// 配置插件
publishing {
repositories {
maven {
// change to point to your repo, e.g. http://my.org/repo
url = layout.buildDirectory.dir("repo")
}
}
}
// 配置任务
tasks.named('publish') {
dependsOn('check')
}
项目结构如下:
.
├── build.gradle
├── settings.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
└── gradlew.bat
配置gradle.properties
用于配置一些Gradle环境属性,如:
org.gradle.parallel=true
org.gradle.caching=true
org.gradle.configureondemand=true
org.gradle.daemon=false
org.gradle.daemon.performance.enable-monitoring=false
项目结构如下:
.
├── gradle.properties
├── build.gradle
├── settings.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
└── gradlew.bat
以上示例看到依然还需要对build.gradle进行大量配置,我们工作还需要做许多常规配置,如配置组件仓库(国内代理仓库)、一些组件的个性化使用配置,这些配置往往是比较重复,每个项目都需要配置一次,且不利于后期维护,因此建议封装插件,使用同一套插件就好了。
IHub Plugins
一套Gradle插件集,封装了常用Gradle插件,并做了一些个性化缺省配置,极大的简化项目管理配置。封装了常见的组件仓库、代码检查、组件发布等配置,详见https://doc.ihub.pub/plugins/#/。
setting.gradle配置简化
插件封装了仓用的插件仓库配置以及多项目个性化配置,参见文档,配置简化如下:
plugins {
id 'pub.ihub.plugin.ihub-settings' version '1.1.4'
}
build.gradle配置简化
封装了一些常规配置以及一些个性化插件配置,参见文档,配置简化如下:
plugins {
id 'pub.ihub.plugin'
}
开源不易,感谢大家的支持和鼓励,欢迎为该项目添砖加瓦,项目地址: