使用gradle构建java项目(1)-阿里云开发者社区

开发者社区> 黄威的世界> 正文

使用gradle构建java项目(1)

简介:
+关注继续查看

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'
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Gradle 使用技巧(四) - 如何定位和解决依赖冲突
1. 前言 随着业务的复杂度加深,我们免不了要引入许多的第三方开源库,也不可避免的会出现依赖冲突的错误。最常见的是V7、V4包之间的冲突。 2. 如何定位依赖冲突 解决依赖冲突很简单,难得是如何去定位是引入的哪个库导致的依赖冲突。
2494 0
[细说Java](3)创建字符串是使用" "还是构造函数?
在Java中,可以使用两种方式创建字符串: String x = "abc"; String y = new String("abc"); 对于这两种方式(双引号,构造函数)它们到底有什么区别呢? 1.
697 0
使用Gradle运行集成测试
如果Gradle构建的项目是一个web项目的话,里面可能包含一些集成测试和功能性测试。这些测试和单元测试不同之处是在运行之前要先在本地将web服务启动起来,并且跑完测试后能够自动的关闭web服务。 在本地启动web服务我们可以使用Gradle内置的jetty插件。
635 0
使用 Maven 快速构建 Alink 项目
刚发布的 Alink 1.1.0 版本,支持发布到 Maven Central,Java 开发者通过 Maven 可以快速搭建 Alink 机器学习项目。本文将演示一个简单的构建方案,便于爱好者快速入门。
747 0
Gradle中使用idea插件的一些实践
如果你的项目使用了Gradle作为构建工具,那么你一定要使用Gradle来自动生成IDE的项目文件,无需再手动的将源代码导入到你的IDE中去了。 如果你使用的是eclipse,可以在build.gradle中加入这么一行. 1 apply plugin: 'eclipse' 然后在命令行中输入gradle eclipse就可以生成eclipse的项目文件,直接使用eclipse打开生成的项目文件即可。
1229 0
把项目从Maven迁移到Gradle
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/49098757 把项目从Maven迁移到Gradle 作者:chszs,版权所有,未经同意,不得转载。
614 0
使用ECS服务器搭建javaweb项目
在领取了阿里云的学生服务器试用后,使用宝塔面板进行javaweb项目的搭建
169 0
使用IntelliJ IDEA 14和Maven创建java web项目
原文:使用IntelliJ IDEA 14和Maven创建java web项目 http://mark.leanote.com/post/%E4%BD%BF%E7%94%A8IntelliJ-IDEA-14%E5%92%8CMaven%E5%88%9B%E5%BB%BAjava-web%E9%A1%B9%E7%9B%AE 安装Maven 下载安装 去maven官网下载最新版。
1283 0
最新版gradle安装使用简介
gradle的最新版本是6.7,从2009年的第一个版本,到2020年的6.7,已经发展了11年了。gradle是作为android的官方构建工具引入的,除了java,它还能够支持多种语言的构建,所以用途非常广泛。
291 0
Gradle 使用技巧(五) - AAR
1. 什么是AAR 关于aar文件,摘取官方的解释:AAR 文件的文件扩展名为 .aar,Maven 工件类型也应当是 aar。文件本身是一个包含以下强制性条目的 zip 文件: /AndroidManifest.
1358 0
+关注
黄威的世界
我是一个热衷IT技术的人,希望自己不断地设计开发出对别人非常有用的软件。有近7年的java开发经验(包括2年Android开发经验)和一年左右的linux使用经验。擅长Java Web后台开发 ,喜欢研究新的各种实用技术
668
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载