Gradle简介及与Maven项目的互相转化

简单介绍

下一代Maven。Gradle安装和Maven的安装类似,下载文件,解压设置GRADLE_HOME即可。

project & task

build.gradle类似于pom.xml,一个示例build.gradle文件:

// 声明插件
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'application'
// 指定mainClass
mainClassName = 'hello.HelloWorld'
// 指定仓库
repositories {
    mavenLocal()
    mavenCentral()
}
// 指定构建物及版本
jar {
    baseName = 'gs-gradle'
    version =  '0.1.0'
}
// 指定依赖, 类似Maven GAV
dependencies {
    compile "joda-time:joda-time:2.2"
}
// wrapper
task wrapper(type: Wrapper) {
    gradleVersion = '1.11'
}

Gradle 里的几乎任何东西都是基于两个基础概念:project & task。Gradle 中所有执行的事件都是借由 Task 执行的。对于一个Gradle工程,根目录执行:gradle tasks -q-q表示忽略gradle本身的log信息,加上这个参数可以屏蔽很多无关的输出。
通常会给task附带一些执行动作,称之为Action。
也可以附带一个闭包配置,称之为Configuration,闭包中不仅可用做赋值操作,也可以执行一些自动执行的配置。
Task依赖。

task xxx << {
}

这样的语法等价于

task xxx
xxx.dolast {
}

关于project:
目录:
重要文件:
setting.gradle文件

一个父工程 project 可以包含多个子工程 child-project,一般一个工程一个 build.gradle 文件。父工程的 build.gradle 统一管理子工程的build.gradle。

Gradle Wrapper

Gradle wrapper automatically generates several files for you that helps to allow people to build your code without needing to install Gradle ahead of time, which is useful especially when needing to do continuous integration testing.
By checking in the gradlew and gradlew.bat files into your source code repository, other people on Unix and Windows platforms do not need to go through the process of manually downloading Gradle or installing Android Studio.

Gradle的封装。有了Gradle wrapper,即便机器上没有安装Gradle,也可执行Gradle的构建工作。

build.gradle里加入类似如下task:

task createWrapper(type: Wrapper) {
    gradleVersion = '1.1.1'
}

生成gradle wrapper时指定项目所需要用的gradle版本,这样当别人用gradle wrapper时,然后执行该task: gradle createWrapper,就会在项目工程生成以下的文件:

Project-name/
  gradlew
  gradlew.bat
  gradle/wrapper/
    gradle-wrapper.jar
    gradle-wrapper.properties

这些文件即构成gradle wrapper。这些文件需要上传到版本控制工具的server端(如GitLab)。生成这些文件的操作只需要做一次即可。

使用gradle wrapper时,直接在项目根目录下直接执行gradlewgradle wrapper简写), 方式和gradle一模一样,如通过``。执行gradlew命令时,gradlew会委托gradle命令来做相应的事情,gradlew只是一个壳。wrapper会检查当前机器是否已经安装对应版本的gradle,如果安装,gradlew就会委托gradle执行用户输入的命令。如果未安装,则自动从Gradle repository下载并安装在本地~/.gradle/wrapper目录。也可以在配置文件中指定想要下载的server来替代默认的Gradle repo。

Gradle会自动为新建的工程添加wrapper。也就是你就不必自己再去创建gradle wrapper,直接在命令行或者你的编译脚本中使用就好。
常用命令:

gradlew -v // 版本号
gradlew clean // 清除build文件夹
gradlew build // 检查依赖并编译打包
gradlew tasks // 查看所有任务
gradlew assembleDebug // 编译并打Debug包
gradlew assembleRelease // 编译并打Release的包
gradlew installRelease // Release模式打包并安装
gradlew uninstallRelease // 卸载Release模式包

gradlew build,把debug、release环境的包都打出来,如果正式发布只需要打Release的包。

Gardle v.s. Maven

优势

  • 基于 groovy 的简洁语法;
  • groovy task 比 maven plugin 灵活方便;

互相转化

gradle --> maven

把gradle转成maven项目,前提是gradle项目目录结构保持跟maven一样的约定,即/src/main/java
build.gradle中增加以下内容(group,version可自行修改,artifactId默认为目录名称)

apply plugin: 'java'
apply plugin: 'maven'

group = 'com.johnny'
version = '1.7'
sourceCompatibility = 1.8

执行gradle install,成功后将在build\poms目录下生成pom-default.xml文件,复制到根目录下,改名成pom.xml即可。通过修改build.gradle也可以直接在根目录下生成pom.xml

task writeNewPom << {
    pom {
        project {
            inceptionYear '2018'
            licenses {
                license {
                }
            }
        }
    }.writeTo("$buildDir/pom.xml")
}

maven --> gradle

安装gradle 2.0以上的版本,在maven根目录下运行:gradle init --type pom

参考

  • Gradle在大型Java项目上的应用

你可能感兴趣的:(Maven,gradle)