Groovy语言学习和Gradle项目搭建笔记 (上)

Groovy 是 用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性。
Groovy是JVM的一个替代语言(替代是指可以用 Groovy 在Java平台上进行 Java 编程),使用方式基本与使用 Java代码的方式相同,该语言特别适合与Spring的动态语言支持一起使用,设计时充分考虑了Java集成,这使 Groovy 与 Java 代码的互操作很容易。(注意:不是指Groovy替代java,而是指Groovy和java很好的结合编程。


================》》》》》》》》》》》》》》理论特点部分
Groovy 语言特点
    1.groovy最后也会被java虚拟机编译成字节码
    2.代码行位分号可以选的
    3.类和方法默认是public
    4.属性会自动添加getter/setter方法
    5.属性可以直接用点号获取 就像json对象获取属性一样
    6.方法最后一个表达式的值会作为返回值 可以省略return
    7. == 比较是使用java的equals方法 并且不会抛空指针异常

    高效特效
    1.assert 可以在任何地方断言使用
    2.变量类型是弱类型 def 和js的var 差不多
    3.调用有参方法,可以省略括号不写
    4.字符串有三种 双引号,单引号,三个单引号。
    5.集合API有更简洁的写法
    6.闭包: 就是一段代码块 可以作为方法参数传入 也可以赋值给某一个变量





//实例demo部分
//定义版本
class ProjectVersion{
    private int major;
    private int minor;

     ProjectVersion(int major,int minor){
        this.major = major;
        this.minor = minor;
    }
    int getMajor() {
         major
    }
    void setMajor(int major) {
        this.major = major
    }
    int getMinor() {
         minor
    }
    void setMinor(int minor) {
        this.minor = minor
    }



}
ProjectVersion v1 = new ProjectVersion(1,1)
ProjectVersion v2 = null

//没有空指针抛出
println v1 == v2

//弱类型变量
def version = 1

//在任何地方都可以使用断言
assert  version == 1

//单纯字符串
def s1 = 'aaa version is '
//可插入变量引用的字符串
def s2 = "bbb${version}"
//可以进行换行的字符串
def s3 = '''cc
c
is'''

//有参方法调用 可以省略括号 每行结束可以省略分号
println s1
println s2
println s3

//集合的使用
//list 默认对应的是ArrayList
def buildTools = ['ant','maven']
//等同于 list对象的 add('gradle') 进行添加一个元素
buildTools << "gradle${version}"
assert(buildTools.getClass() == ArrayList);
assert  buildTools.size() == 3
println buildTools.get(2)

//map
def buildYears = ['ant':2000,'maven':2004]
//往map中添加值
buildYears.gradle=2009


println buildYears.ant
println buildYears['gradle']
println buildYears["maven"]
println buildYears.getClass()


//闭包就是一个代码块 可以有参数也可以没参数
// 可以赋值给一个变量 也可以作为匿名方法作为参数使用 就是一个没有方法名的方法
//可以被直接调用

//闭包代码块
def c1 = {
    //v 是c1方法的参数 类型可以省略 -> 后面就是方法体
    v  ->
        println v
}
//闭包代码块
def c2 ={
    println 'hello'
}

//使用closure时候 不能导入任何包 因为那是java的 导入就会报错
//定义方法 入参类型为闭包代码块
def method1 (Closure closure){

    //调用闭包 传入 'param'作为参数
    closure 'param'
}
//定义方法 入参类型为闭包代码块
def method2(Closure closure){

    //调用闭包
    closure ()
}
def method3(LinkedHashMap map){

    //调用
    println "调用map参数的方法"
    println map.gradle
}

//调用方法
method1(c1)
//调用方法
method2(c2)
//调用map参数的方法
method3 buildYears



//gradle生成的build脚本   该脚本就是调用build.gradle脚本实例化的project类中的方法,进行构建项目的,所以创建成功 会生成gradle目录和build目录
//构建脚本中 默认都有个project实例
//调用project实例上的group方法
group 'demo'
//调用project实例上的version方法 参数类型是一个String
version '1.0-SNAPSHOT'
//调用project实例上的apply 方法  参数类型是一个LinkedHashMap 声明使用的插件
apply plugin: 'groovy'
//调用project实例上的apply 方法  参数类型是一个LinkedHashMap 声明使用的插件
apply plugin: 'java' //添加war插件 有什么插件可使用 可以查看官网   加入这个插件打包jar 并 多出一些可使用的命令
apply plugin :'war'  //添加war插件 有什么插件可使用 可以查看官网   加入这个插件打包war  

//java版本
sourceCompatibility = 1.8
//调用project实例上的repositories方法 {闭包代码块作为该方法的参数传入}  这里是指定依赖仓库
repositories {
    //调用project的空参数方法
    mavenCentral()
}
//调用project实例上的dependencies方法 {闭包代码块作为该方法的参数传入}  这里是声明依赖
dependencies {
    //调用compile方法 参数为'org.codehaus.groovy:groovy-all:2.3.11' 类型为字符串
    compile 'org.codehaus.groovy:groovy-all:2.3.11'
    //testCompile 参数为LinkedHashMap类型
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

//创建一个执行目录生成的闭包
def createDir = {
    path ->
        File dir = new File(path);
            if(!dir.exists()){
                dir.mkdirs();
            }
}
//声明一个自定义创建目录任务
task makeJavaDir(){
    def paths = ['src/main/java','src/main/resources','src/test/java','src/test/resources']
    //调用doFirst[任务动作列表前执行]方法,参数是一个闭包,闭包中调用了paths.forEach(createDir)方法
    doFirst{
        paths.forEach(createDir);//将循环的每一元素传入闭包中进行调用
    }
}

//声明一个自定义创建目录任务
task makeWebDir(){
    //依赖makeJavaDir任务 每次执行该任务就会先执行依赖的任务
    dependsOn 'makeJavaDir'
    def paths = ['src/main/webapp','src/test/webapp']
    //调用doLast[任务动作列表后执行]方法,参数是一个闭包,闭包中调用了paths.forEach(createDir)方法
    doLast{
        paths.forEach(createDir);//将循环的每一元素传入闭包中进行调用
    }












打包[打包类型 根据build.gradle脚本参数决定] 如果是idea
大概整理一下其中的命令
Source Sets
Tasks
–build
– …
–build //点击执行打包构建命令 打包类型根据build.gradle脚本配置有关 会处理test目录的资源文件也会打包test目录的文件
–classes //点击执行重新编译生成的包文件命令
–clean //点击执行清空生成的包文件
–jar //执行打包命令 打包成jar 不会处理test目录的资源文件也不会打包test目录的文件
–war //如果添加war插件 则会出现该命令 打包成war包 不会处理test目录的资源文件也不会打包test目录的文件
–…
–build setup
–documentation
–help
–other //这里面的命令就是处理资源文件 编译文件
–verification
Run Configurations //配置启动参数
构建脚本
group 分组 n
ame 名字 version版本 用来确定依赖的坐标
build.gradle 中常用方法 apply[所需插件]、dependencies[所需依赖]、repositories[指定依赖仓库],task[自定义任务]
属性的配置方式 ext、 或者建立gradle.properties文件来声明属性

    taskdependsOn 声明任务依赖于上一个任务动作[会先执行所依赖的任务]
    一个任务包含多个任务动作
    doFirst[任务动作列表前添加动作]、doLast<<[任务动作列表后添加动作]  一个任务可以包含多个doFirst和doLast  

    自定义任务名称 存在于other 中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值