你还只会用Maven做项目构建吗?是时候尝试一种新的方式了~~~

技术3年前 (2021)更新 呵呵
1,855 0 0

在我们的日常工作中项目构建工具是必不可少的,常见的Java项目构建工具有Ant、Maven、Gradle,它们可以帮助我们自动完成一些项目构建工作,比如编译、打包、部署、依赖管理等,而且提供丰富的组件可以一个“命令”完成日常项目管理工作。大家常常会使用Maven来作为构建工具,但随着项目结构越来越复杂,配置会越来越繁杂,是时候尝试一种新的方式了~~~

什么是Gradle?

Gradle是源于Apache AntApache Maven概念的项目自动化构建开源工具,它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置面向Java应用为主。当前其支持的语言暂时有Java、Groovy、Kotlin、Scala、Android、C++和Swift。

下面是Gradle和Apache Maven的一个比较,详见

你还只会用Maven做项目构建吗?是时候尝试一种新的方式了~~~
Gradle vs 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.gradleSettings实例对应,用来声明实例化和配置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'
}

开源不易,感谢大家的支持和鼓励,欢迎为该项目添砖加瓦,项目地址:

Github:https://github.com/ihub-pub/plugins

Gitee:https://gitee.com/ihub-pub/plugins

© 版权声明

相关文章

没有相关内容!

暂无评论

暂无评论...