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

来源:互联网 发布:黑暗之光坐骑升阶数据 编辑:程序博客网 时间:2024/06/16 00:04

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 = '''cccis'''//有参方法调用 可以省略括号 每行结束可以省略分号println s1println s2println s3//集合的使用//list 默认对应的是ArrayListdef buildTools = ['ant','maven']//等同于 list对象的 add('gradle') 进行添加一个元素buildTools << "gradle${version}"assert(buildTools.getClass() == ArrayList);assert  buildTools.size() == 3println buildTools.get(2)//mapdef buildYears = ['ant':2000,'maven':2004]//往map中添加值buildYears.gradle=2009println buildYears.antprintln 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方法 参数类型是一个Stringversion '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 中。
原创粉丝点击