使用gradle构建java项目(1)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介:

gradle 是什么

gradle 是一个让构建自动化的工具,类似于maven,ant的功能.
使用gradle可以给java项目编译,单元测试,打包,或者生成可执行的jar包等

gradle的依赖环境

gradle依赖java环境,所以使用gradle前需要安装jdk 或jre

gradle 构建项目的流程

gradle的构建依赖于task,
task可以指定与其他task之间的依赖关系
比如,有两个task,walk 和bike,如果指定walk依赖bike,那么
执行walk前会先执行bike.

task的来源有两种:

  1. 插件提供,gradle有很多现成的插件;

8a4823973d0541d2eed6ed26b84561bdbbf.jpg

  1. 自定义:在build.gradle 文件中声明task

e6c1f7ace96348dfba7f27da91b7fef95f0.jpg

生命周期

maven 的构建是通过生命周期来排列的,而 gradle 不是,它没有生命周期,它是通过任务的依赖关系来组织顺序的。

build.gradle 的执行流程

Lifecycle
There is a one-to-one relationship between a Project and a build.gradle file. During build initialisation, Gradle assembles a Project object for each project which is to participate in the build, as follows:

  1. Create a Settings instance for the build.
  2. Evaluate the settings.gradle script, if present, against the Settings object to configure it.
  3. Use the configured Settings object to create the hierarchy of Project instances.
  4. Finally, evaluate each Project by executing its build.gradle file, if present, against the project. The projects are evaluated in breadth-wise order, such that a project is evaluated before its child projects. This order can be overridden by calling Project.evaluationDependsOnChildren() or by adding an explicit evaluation dependency using Project.evaluationDependsOn(java.lang.String).

如何执行任务

方式一:使用全局命令

gradle <任务名>
113bccf7ad0c12859e52d947270487db401.jpg

方式二:使用项目中的脚本

./gradlew <任务名>
c5b538b2f4e34c680243a4055ba4c90086c.jpg

task 能实现哪些功能

下面是一些常用的基本功能

复制

task walk(description:'walk') {
    doLast {
        println 'walk...'
        println myName
        copy {
            into 'demo'
            exclude '**/.svn/**'
            from('README.md')
        }
    }
}

删除

task walk(description:'walk') {
    doLast {
        println 'walk...'
        println myName
        project.delete {
            delete 'README.md'
            followSymlinks = true
        }
        
    }
}

生成源码 jar 包

task sourcesJar(type: Jar) {
        classifier = 'sources'
        from sourceSets.main.allSource
        doFirst {
            manifest = defaultManifest([
                    project      : subproj,
                    projectVendor: project_vendor
            ])
        }
    }

设置/添加依赖

使用project 下面的dependencies
d18e9729da31def6889fc71d77a6d9be9ee.jpg

see /Users/whuanghkl/.gradle/wrapper/dists/gradle-4.4-all/9br9xq1tocpiv8o6njlyu5op1/gradle-4.4/src/core-api/org/gradle/api/Project.java

 void dependencies(Closure configureClosure);

dependencies 方法的参数是一个配置闭包,那么这个闭包有哪些配置呢?
5b926d1d98df5034b9f6e24055096aeb813.jpg

maven 中的

 <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
            <scope>compile</scope>
        </dependency>

等价于

compile 'commons-lang:commons-lang:2.6'

参考:https://docs.gradle.org/current/userguide/java_plugin.html#tab:configurations
https://docs.gradle.org/current/userguide/managing_dependency_configurations.html

引入本地jar包

 compile project.fileTree(dir:'/Users/whuanghkl/code/mygit/myproject/target',include:['io0007-0.0.1.jar'])

依赖指定文件夹

 compile project.fileTree(dir:'/Users/xx/Documents/mygit/demo/io0007/target',include:['*.jar'])
    compile project.fileTree(dir:'/Users/xx/Documents/mygit/demo/idea_plugin/intellij-aa-editor/lib',include:['*.jar'])

如何查询依赖的版本

直接使用 maven 仓库,那么就可以直接查询maven 仓库
https://mvnrepository.com/search?q=common-lang

gradle中依赖的仓库有多种:
8c277fb28a9985cf3e694833ea531cf46c8.jpg

参考:https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.dsl.RepositoryHandler.html

我们可以选择 maven仓库:

repositories {
    mavenCentral()
}

也可以使用本地的 maven 仓库:

repositories {
    mavenLocal()
}

2019-02-21_15-38-10.png
甚至可以直接指定依赖的 jar 包目录:

 maven {
        url "lib"
    }

那么 查询依赖就和maven一样了 .

gradle的插件有哪些

参考 https://docs.gradle.org/current/userguide/userguide.html

e10c1b93a97ae566bcc402852974f61fbdc.jpg

springboot 项目生成可执行的jar包

我的项目是spring boot,所以需要引入插件'org.springframework.boot'
id 'org.springframework.boot' version '2.0.4.RELEASE'
需要在build.gradle 文件中 指定可执行jar的main class :

jar {
    manifest {
        attributes 'Main-Class': 'com.kunlunsoft.Application'
    }
}

执行任务bootJar 就可以生成可执行的jar包
6de57783a20b55af0908f5cfe442310e2fd.jpg

cc53f5ef57729601e84096dd3f9d2ad232e.jpg

gradle 与maven相比有哪些优势

  1. 功能更强大,可以很方便的自定义任务;
  2. 添加依赖更简洁方便;
  3. 任务的执行流程更灵活,不像maven的生命周期那么固定.
  4. 可以编写 groovy 代码,我们知道 groovy 是非常灵活的。

参考

https://my.oschina.net/huangweiindex/blog/1844872
https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.dsl.DependencyHandler.html
https://docs.gradle.org/current/userguide/java_plugin.html#tab:configurations

我项目中完整的build.gradle 文件如下:

plugins {
    id 'java'
    id 'base'
    id 'org.springframework.boot' version '2.0.3.RELEASE'
}


group 'com.kunlunsoft'
version '1.0.0-SNAPSHOT'

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    mavenCentral()
}

jar {
    manifest {
        attributes 'Main-Class': 'com.kunlunsoft.Application'
    }
}
task walk(description:'walk') {
    doLast {
        println 'walk...'
    }
}


repositories {
    maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    testCompile("org.springframework.boot:spring-boot-starter-test")
    //数据源
    compile 'org.springframework.boot:spring-boot-starter:1.5.14.RELEASE'
    compile 'org.springframework.boot:spring-boot-starter-web:1.5.14.RELEASE'
    compile 'org.springframework.boot:spring-boot-starter-data-redis:1.5.14.RELEASE'
    compile 'mysql:mysql-connector-java:5.1.38'

    compile project.fileTree(dir:'/Users/whuanghkl/code/myproject/target',include:['io0007-0.0.1-SNAPSHOT.jar'])
    compile 'com.google.guava:guava:23.0-rc1'
    compile 'org.apache.commons:commons-email:1.5'
    compile 'org.codehaus.jackson:jackson-mapper-lgpl:1.9.12'
    //redis
//    compile 'org.springframework.data:spring-data-redis:1.8.13.RELEASE'
    compile 'redis.clients:jedis:2.9.0'
    compile 'org.springframework.statemachine:spring-statemachine-core:1.2.0.RELEASE'
    compile 'com.alibaba:fastjson:1.2.47'

//配置mybatis
    compile "org.mybatis.spring.boot:mybatis-spring-boot-starter:1.1.1"

    compile 'org.springframework.boot:spring-boot-gradle-plugin:1.5.14.RELEASE'
//    compile 'org.springframework:springloaded:1.5.14.RELEASE'
}
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
安全 前端开发 Java
随着企业应用复杂度提升,Java Spring框架以其强大与灵活特性简化开发流程,成为构建高效、可维护应用的理想选择
随着企业应用复杂度提升,Java Spring框架以其强大与灵活特性简化开发流程,成为构建高效、可维护应用的理想选择。依赖注入使对象管理交由Spring容器处理,实现低耦合高内聚;AOP则分离横切关注点如事务管理,增强代码模块化。Spring还提供MVC、Data、Security等模块满足多样需求,并通过Spring Boot简化配置与部署,加速微服务架构构建。掌握这些核心概念与工具,开发者能更从容应对挑战,打造卓越应用。
35 1
|
26天前
|
Java API 开发者
【Java模块化新飞跃】JDK 22模块化增强:构建更灵活、更可维护的应用架构!
【9月更文挑战第9天】JDK 22的模块化增强为开发者构建更灵活、更可维护的应用架构提供了强有力的支持。通过模块化设计、精细的依赖管理和丰富的工具支持,开发者可以更加高效地开发和管理应用,提高应用的性能和可维护性。
57 10
|
2月前
|
JSON Java 对象存储
Java系统中的错误码设计问题之ProblemBuilder构建错误如何解决
Java系统中的错误码设计问题之ProblemBuilder构建错误如何解决
13 1
|
2月前
|
Java 持续交付 项目管理
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。它采用项目对象模型(POM)来描述项目,简化构建流程。Maven提供依赖管理、标准构建生命周期、插件扩展等功能,支持多模块项目及版本控制。在Java Web开发中,Maven能够自动生成项目结构、管理依赖、自动化构建流程并运行多种插件任务,如代码质量检查和单元测试。遵循Maven的最佳实践,结合持续集成工具,可以显著提升开发效率和项目质量。
41 1
|
2月前
|
存储 Java 数据挖掘
|
12月前
|
人工智能 移动开发 Java
Android Studio插件版本与Gradle 版本对应关系
Android Studio插件版本与Gradle 版本对应关系
2089 0
Android Studio插件版本与Gradle 版本对应关系
|
存储 Java Android开发
Android 开发 - 充分利用Gradle
Android 开发 - 充分利用Gradle
158 2
|
4月前
|
C# Android开发 开发者
Android gradle编译时字节码处理
Android gradle编译时字节码处理
52 1
|
4月前
|
Android开发
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
166 0
|
5月前
|
Java 测试技术 Android开发
Android Gradle 干货,看这篇文章就行了
Android Gradle 干货,看这篇文章就行了
下一篇
无影云桌面