Java管理——Gradle使用速记

简介: 在J2SE或J2EE工程中关于包的管理主要是Ant、Maven和Gradle,本文的目标是10分钟快速入门Gradle。

安装

安装SDKMAN

Gradle在安装之前可以选择很多安装方式,这里选择SDKMAN。其他方式见安装说明

linux安装SDKMAN,分别执行:

# 下载安装执行
$ curl -s "https://get.sdkman.io" | bash
# 自行设置
$ source "$HOME/.sdkman/bin/sdkman-init.sh"

安装结果测试。

输入:

$ sdk version 

成功安装会输出:

==== BROADCAST =================================================================
* 02/07/18: Kscript 2.4.5 released on SDKMAN! #kscript
* 28/06/18: Micronaut 1.0.0.M2 released on SDKMAN! #micronautfw
* 27/06/18: Infrastructor 0.2.0 rolling out. With stronger encryption and new task progress UI.
================================================================================

SDKMAN 5.6.4+305

安装Gradle

Gradle需要JDK7以上才能运行,请先使用 java -version 命令确定环境。 

使用SDKMAN安装Gradle:

# 4.8.1是当前gradle的版本,根据需要调整
$ sdk install gradle 4.8.1

安装完成后输入gradle -v检查安装结果:

$ gradle -v
------------------------------------------------------------
Gradle 4.8.1
------------------------------------------------------------

Gradle基础要点知识

  • 一个Gradle文件(例如build.gradle)视为一个project。在Gradle的项目组织中就2个层级——Project和Task。
  • 在Gradle中有3个重要的概念Project、Plug、Task。三者的关系:Project就是一个容器,里面可以放置各种类型的Task,Plug是一堆Task的集合。
  • Gradle中所有的功能都是以一个Task实现的,包括Jar包的依赖。
  • Properties:Project和Task都有自己的属性(Properties)。Project级别的属性可以设置,也可以通过外部传入。

一个配置案例

/**
build.gradle
这是一个使用 gradle init --type java-application创建的Gradle Project,进行了一些修改
整个文件的范围都是一个Project。
**/
// ---------------------------------------------------------------------
// 引入预设的Plug
// 一个plug中会包含多个Task
// plugins是Project的一个方法
// 里面的id实际上也是一个方法。
plugins {
    id 'java'
    id 'application'
}

// 资源路径的设置参数。用于java plug中的task
// Gradle的资源路径和Maven的几乎一样,也可以单独配置
sourceSets {
   main {
      java {
         srcDir 'src/main/java'
      }
      resources {
         srcDir 'src/main/resources'
      }
   }
}
//-----------------------------------
/**
如果不设置,资源路径默认为:
src {
   main{
      java
      res
   }
   test{
      java
      res
   }
}
**/
//-----------------------------------

// mainClassName可以理解为一个变量
// 定义这个程序的Main Class,实际上这也是在设定一个Project的属性
mainClassName = 'App'

//预设一个用于装载结构的类,Gradle使用groovy语法
class GroupAndVersion {
	String group
	String version
}

// 向project添加一个名为“spring”的属性,属性的值是一个GroupAndVersion的一个实例。
// ext是Project的一个方法,作用就是添加一个属性。
ext {
	spring = new GroupAndVersion(group:'org.springframework', version:'5.0.7.RELEASE')
}

// dependencies 是由某个plug中的预设的“方法”,
// Gradle是groovy语法,这里就是执行Project.dependencies方法
// Plug中可以用project.extensions.create扩展Project中的定义方法
dependencies {
    //compile表示引入包的执行域
    compile 'com.google.guava:guava:23.0'

    //使用定义好的属性引入包
	compile group: spring.group, name: 'spring-core', version: spring.version
	compile group: spring.group, name: 'spring-beans', version: spring.version
	compile group: spring.group, name: 'spring-context', version: spring.version

    testCompile 'junit:junit:4.12'
}

// repositories与dependencies一样的性质,同样会被用于某个task
// repositories用于指定依赖仓库
repositories {
    jcenter()
}

// 自定义的一个任务,用于呈现当前依赖包的物理地址
task show << {
	println configurations.compile.asPath
}

配置文件对应的工程结构:

project
--bin IDE动态编译的文件(Eclipse)
----main
----test
--build 运行gradle build命令生成的文件
---- classes Java 工程目录对应的.class文件
---- distributions 打包之后的压缩包
---- lib 打包之后的jar
---- report 测试报告
---- scripts 打包之后的启动脚本
---- test-result 测试结果
---- tmp 临时文件,比如会在打包jar之前临时存放MANIFEST.MF
--gradle gradle执行相关的文件,比如gradle-wrapper
--src 源码和资源
----main
----text
--build.gradle
--gradlew
--settings.gradle

设置仓库源

默认情况下Gradle会使用Maven或Ivy的中央仓库,在当前用户的${home}.gradle文件下新建一个init.gradle文件,然后写入:

allprojects{
  repositories {
    def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'
      all { ArtifactRepository repo ->
        if(repo instanceof MavenArtifactRepository){
          def url = repo.url.toString()
          if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) {
            project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
            remove repo
          }
       }
    }
    maven {
      url REPOSITORY_URL
    }
  }
}

这样链接的仓库会执行国内的阿里镜像。

快速初始化项目

Gradle提供了初始化各自类型项目的命令:

$ gradle init --type <name>
# <name>取以下值
# java-application java应用程序
# java-library jar包
# scala-library scala包
# groovy-library groovy包
# basic 基本工程
# 配置出来的工程结构都可以在后期通过修改build.gradle修改
相关文章
|
14小时前
|
监控 前端开发 Java
Java基于B/S医院绩效考核管理平台系统源码 医院智慧绩效管理系统源码
医院绩效考核系统是一个关键的管理工具,旨在评估和优化医院内部各部门、科室和员工的绩效。一个有效的绩效考核系统不仅能帮助医院实现其战略目标,还能提升医疗服务质量,增强患者满意度,并促进员工的专业成长
8 0
|
8天前
|
SQL Java
20:基于EL与JSTL的产品管理页-Java Web
20:基于EL与JSTL的产品管理页-Java Web
20 5
|
15天前
|
搜索推荐 前端开发 Java
java医院绩效考核管理系统项目源码
系统需要和his系统进行对接,按照设定周期,从his系统获取医院科室和医生、护士、其他人员工作量,对没有录入信息化系统的工作量,绩效考核系统设有手工录入功能(可以批量导入),对获取的数据系统按照设定的公式进行汇算,且设置审核机制,可以退回修正,系统功能强大,完全模拟医院实际绩效核算过程,且每步核算都可以进行调整和参数设置,能适应医院多种绩效核算方式。
18 0
|
21天前
|
JavaScript Java 测试技术
基于Java的同城蔬菜配送管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的同城蔬菜配送管理系统的设计与实现(源码+lw+部署文档+讲解等)
14 0
|
21天前
|
JavaScript Java 测试技术
基于Java的心理预约咨询管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的心理预约咨询管理系统的设计与实现(源码+lw+部署文档+讲解等)
31 0
基于Java的心理预约咨询管理系统的设计与实现(源码+lw+部署文档+讲解等)
|
21天前
|
JavaScript Java 测试技术
基于Java的企业员工岗前培训管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的企业员工岗前培训管理系统的设计与实现(源码+lw+部署文档+讲解等)
27 1
基于Java的企业员工岗前培训管理系统的设计与实现(源码+lw+部署文档+讲解等)
|
21天前
|
JavaScript Java 测试技术
基于Java的电竞交互管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的电竞交互管理系统的设计与实现(源码+lw+部署文档+讲解等)
26 0
基于Java的电竞交互管理系统的设计与实现(源码+lw+部署文档+讲解等)
|
21天前
|
JavaScript Java 测试技术
基于Java的高校毕业生就业管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的高校毕业生就业管理系统的设计与实现(源码+lw+部署文档+讲解等)
27 0
基于Java的高校毕业生就业管理系统的设计与实现(源码+lw+部署文档+讲解等)
|
21天前
|
JavaScript Java 测试技术
基于Java的西安旅游管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的西安旅游管理系统的设计与实现(源码+lw+部署文档+讲解等)
24 0
|
21天前
|
JavaScript Java 测试技术
基于Java的学生宿舍设备报修管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的学生宿舍设备报修管理系统的设计与实现(源码+lw+部署文档+讲解等)
27 1