热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用gradle构建java项目

gradle是什么东东gradle是继ant,maven之后另外一种的面向java的自动化项目构建工具,他是基于groovy语言的。相对于ant,maven

 

  • gradle是什么东东

            gradle是继ant,maven之后另外一种的面向java的自动化项目构建工具,他是基于groovy语言的。相对于ant,maven,gradle显得更加简单。

  • 安装gradle

               gradle从官方网站上下载http://gradle.org/,加压后拷贝到要安装的指定目录下。

  • 配置环境变量

              需要配置GRADLE_HOME路径,同时配置classpath和path两个环境变量

              1、在path追加;%GRADLE_HOME%/bin

              2、在classpath追加;%GRADLE_HOME%/lib

  • eclise中安装gradle插件

              插件安装地址:http://dist.springsource.com/release/TOOLS/gradle

  • 关于gradle免费的ebook

     官方网站上提供红宝书的如何使用gradle的ebook,只要输入电子邮箱即可,下面是我提供的ebook下载地址

      Gradle_Beyond_the_Basics

      Building_and_Testing_with_Gradle
  • gradle语法

              1、gradle常用命令语法

       /*gradle 帮助命令*/
       gradle --help
       
       /*gradle 状态查看*/
       gradle status
       
       /*gradle 构建*/ 
       gradle build 

       /*查看所有任务*/
       gradle tasks

       /*查看项目的属性*/
       grade Properties 

       /*查看项目依赖关系*/
       gradle dependencies

            2、语法解释,创建名为HelloWorld的任务

        task HelloWorld(dependsOn:BeforeHellowWord) <<{
            doLast{
                println 'hello, world'
            }
        }

              <<表示追加代码

              doLast表示当前代码加到当前任务的前面执行过程              

               声明依赖关系两种方式

               直接在任务中定义dependsOn依赖的任务,或者先声明task,然后再声明依赖关系         

        HelloWorld.dependsOn BeforeHellowWord

               执行以下指令

        gradle -q helloWorld

                显示结果为hello, world

              

            3、gradle属性定义

        #方式一
        task taskDescriptionOne <<{
           description = 'this is task taskDescriptionOne'
           println description
        }

        #方式二
        task taskDescriptionTwo <<{
           println description
        }
        taskDescriptionTwo.description = 'this is task taskDescriptionTwo'

        #方式三
        task taskDescriptionThree <<{
           println description
        }

        taskDescriptionThree{
           description = 'this is task taskDescriptionThree'
        }

               Gradle都会为每一个task在Project中创建一个同名的Property,我们可以将该Task当作Property来访问,诸如taskDescriptionTwo 。另外,Gradle还会创建一个同名的方法,该方法接受一个闭包,我们可以使用该方法来配置Task,诸如taskDescriptionThree.

  • gradle自定义属性

             gradle默认的属性有以下这些常用的属性

        project:Project本身
        name:Project的名字
        path:Project的绝对路径
        description:Project的描述信息
        buildDir:Project构建结果存放目录
        version:Project的版本号

              另外gradle还允许通过以下几种方式自定义属性

               1、在build.gradle文件中定义Property
                     在build.gradle文件中向Project添加额外的Property时,我们并不能直接定义,而是应该通过ext来定义。如果要添加一个名为property1的Property,我们应该:

           ext.property1 = "this is property1"

                      通过闭包方式进行自定义属性

           ext {
               property2 = "this is property2"
           }

                     在定义了Property后,使用这些Property时我们则不需要ext,而是可以直接访问:

           task showProperties <<{
                println property1
                println property2
           }

                  2、通过命令行参数定义Property
                           Gradle还提供了-P命令行参数来设置Property,比如:

              task showCommandLieProperties <<{
                   println property3
              }

                            在执行“gradle showCommandLieProperties”时,终端输出如下:

              * What went wrong:
              Execution failed for task ':showCommandLieProperties'.
              > Could not find property 'property3' on task ':showCommandLieProperties'.

                            表示property3并没有被定义,在调用gradle命令时,通过-P参数传入该Property:

              gradle -P property3="this is property3" showCommandLieProperties

                            此时终端显示:

              :showCommandLieProperties
              this is property3
              BUILD SUCCESSFUL

                  3、通过JVM系统参数定义Property
                        在java中,我们可以通过-D参数定义JVM的系统参数,然后在代码中可以可以通过System.getProperty()进行获取。在Gradle中,我们也可以通过-D的方式向Project传入Property,每一个通过-D方式声明的Property都需要以“org.gradle.project”为前缀,对于上面的showCommandLieProperties,我们也可以通过以下方式设置property3:

             gradle -Dorg.gradle.project.property3="this is another property3" showCommandLieProperties

                   4、通过环境变量设置Property
                         我们还可以通过设置环境变量的方式设置Project的Property。在定义环境变量时,每一个Property都需要以“ORG_GRADLE_PROJECT_”为前缀:

            export ORG_GRADLE_PROJECT_property3 = "this is yet another property3"

                           在调用showCommandLieProperties时,我们便不需要传入命令行参数了:

            gradle showCommandLieProperties
  • gradle定义依赖

              定义maven依赖

 

       dependencies {
            compile 'org.slf4j:slf4j-log4j12:1.7.2'
            testCompile 'junit:junit:4.8.2'
       }


              定义project依赖

 

 

       dependencies {
            compile project(':ProjectB')
       }


              对本地文件系统的jar文件依赖

 

 

       dependencies {
           compile files('spring-core.jar', 'spring-aap.jar')
           compile fileTree(dir: 'deps', include: '*.jar')
       }

 

  • gradle自定义task类型

 

       class HelloWorldTask extends DefaultTask {
           @Optional
           String message = 'I am davenkin'

           @TaskAction
           def hello(){
               println "hello world $message"
           }
       }

       task hello(type:HelloWorldTask)


       task hello1(type:HelloWorldTask){
           message ="I am a programmer"
       }

 

  • 使用gradle 打包jar

 

       cd F:\SvnCodeManage\repository\tomcat-redis-session-manager-master
       gradle  jar

             
           

 

             以上便表示成功,在build\libs 可以找到tomcat-redis-session-manager-master-2.0.0.jar 文件,在build\classes中可以找到.class文件

  • 一个完整的gradle.build配置文件

 

    apply plugin: 'java'
    apply plugin: 'maven'
    apply plugin: 'signing'

    group = 'com.orangefunction'
    version = '2.0.0'

    repositories {
      mavenCentral()
    }

    compileJava {
      sourceCompatibility = 1.7
      targetCompatibility = 1.7
    }

    dependencies {
      compile group: 'org.apache.tomcat', name: 'tomcat-catalina', version: '7.0.27'
      compile group: 'redis.clients', name: 'jedis', version: '2.5.2'
      compile group: 'org.apache.commons', name: 'commons-pool2', version: '2.2'
      //compile group: 'commons-codec', name: 'commons-codec', version: '1.9'

      testCompile group: 'junit', name: 'junit', version: '4.+'
      testCompile 'org.hamcrest:hamcrest-core:1.3'
      testCompile 'org.hamcrest:hamcrest-library:1.3'
      testCompile 'org.mockito:mockito-all:1.9.5'
      testCompile group: 'org.apache.tomcat', name: 'tomcat-coyote', version: '7.0.27'
    }

    task javadocJar(type: Jar, dependsOn: javadoc) {
      classifier = 'javadoc'
      from 'build/docs/javadoc'
    }

    task sourcesJar(type: Jar) {
      from sourceSets.main.allSource
      classifier = 'sources'
    }

    artifacts {
      archives jar

      archives javadocJar
      archives sourcesJar
    }

    signing {
      sign configurations.archives
    }

    uploadArchives {
      repositories {
        mavenDeployer {
          beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }

          //repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
          //  authentication(userName: sonatypeUsername, password: sonatypePassword)
          //}
          //repository(url: "https://oss.sonatype.org/content/repositories/snapshots") {
          //  authentication(userName: sonatypeUsername, password: sonatypePassword)
          //}

          pom.project {
        name 'tomcat-redis-session-manager'
        packaging 'jar'
        description 'Tomcat Redis Session Manager is a Tomcat extension to store sessions in Redis'
        url 'https://github.com/jcoleman/tomcat-redis-session-manager'

        issueManagement {
          url 'https://github.com:jcoleman/tomcat-redis-session-manager/issues'
          system 'GitHub Issues'
        }

        scm {
          url 'https://github.com:jcoleman/tomcat-redis-session-manager'
          connection 'scm:git:git://github.com/jcoleman/tomcat-redis-session-manager.git'
          developerConnection 'scm:git:git@github.com:jcoleman/tomcat-redis-session-manager.git'
        }

        licenses {
          license {
            name 'MIT'
            url 'http://opensource.org/licenses/MIT'
            distribution 'repo'
          }
        }

        developers {
          developer {
            id 'jcoleman'
            name 'James Coleman'
            email 'jtc331@gmail.com'
            url 'https://github.com/jcoleman'
          }
        }
          }
        }
      }
    }


  • 参考资料

              http://www.cnblogs.com/CloudTeng/p/3422009.html

              http://blog.csdn.net/maosidiaoxian/article/details/40340571

              http://www.davenkin.me/post/2013-11-12/gradle-first-try

 

 


 


推荐阅读
  • 本文介绍了在Windows系统上使用C语言命令行参数启动程序并传递参数的方法,包括接收参数程序的代码和bat文件的编写方法,同时给出了程序运行的结果。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • MPLS VP恩 后门链路shamlink实验及配置步骤
    本文介绍了MPLS VP恩 后门链路shamlink的实验步骤及配置过程,包括拓扑、CE1、PE1、P1、P2、PE2和CE2的配置。详细讲解了shamlink实验的目的和操作步骤,帮助读者理解和实践该技术。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 2018深入java目标计划及学习内容
    本文介绍了作者在2018年的深入java目标计划,包括学习计划和工作中要用到的内容。作者计划学习的内容包括kafka、zookeeper、hbase、hdoop、spark、elasticsearch、solr、spring cloud、mysql、mybatis等。其中,作者对jvm的学习有一定了解,并计划通读《jvm》一书。此外,作者还提到了《HotSpot实战》和《高性能MySQL》等书籍。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • uniapp开发H5解决跨域问题的两种代理方法
    本文介绍了uniapp开发H5解决跨域问题的两种代理方法,分别是在manifest.json文件和vue.config.js文件中设置代理。通过设置代理根域名和配置路径别名,可以实现H5页面的跨域访问。同时还介绍了如何开启内网穿透,让外网的人可以访问到本地调试的H5页面。 ... [详细]
  • 本文介绍了如何使用elementui分页组件进行分页功能的改写,只需一行代码即可调用。通过封装分页组件,避免在每个页面都写跳转请求的重复代码。详细的代码示例和使用方法在正文中给出。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
author-avatar
好开心6327
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有