java构建入门
    
java插件The Java plugin
    如你所见,Gradle是一个通用工具。它可以通过脚本构建任何你想要实现的东西,真正实现开箱即用,但前提是你需要在脚本里编写好代码才行。
    
    大部分java项目基本流程都是相似的:编译源文件,进行单元测试,创建jar包。使用Gradle做这些工作不必为每个工程都编写代码。Gradle已经提供了完美的插件来解决这些问题。插件就是Gradle的扩展。简而言之就是为你添加一些非常有用的默认配置。Gradle自带了很多插件,而且你也可以很容易的编写和分享自己的插件。java plugin作为其中之一,为你提供了诸如编译,测试,打包等一些功能。
    java插件为工程定义了许多默认值,如java源文件位置,如果你遵循这些默认规则,那么你无需在你的脚本文件中书写太多代码,当然Gradle也允许你自定义项目中的一些规则,实际上,由于对java工程的构建是基于插件的,那么你也可以完全不用插件自己编写代码来进行构建
    
    现在了解java插件的基本用法:
    
一个基本java项目A basic Java project
    using the java plugin
    
    将下面代码添加到你的脚本里:
        apply plugin: 'java'
    只要一运行,会为你添加java插件和一些内置任务。
    标准目录结构如下:
    project
        +build
        +src/main/java
        +src/main/resources
        +src/test/java
        +src/test/resources
    gradle默认从src/main/java搜寻打包源码,在src/test/java下搜寻测试源码,在src/main/resources下的所有文件都会被打包,所有的src/test/resources下的文件都会被添加到类路径用以测试,所有文件都输出到build下,打包的文件都输出到build/libs下
    
    gradle tasks列出任务列表
    
构建项目Building the project
    java插件为你添加了众多任务,但是它们只是在你需要构建项目时候才能发挥作用。最常用的就是build任务,这会构建整个项目。当你执行gradle build时,Gradle会编译并执行单元测试,并且将src/main/*下面class和资源文件打包
    
    运行gradle build的输出结果:
    > gradle build
    :compileJava
    :processResources
    :classes
    :jar
    :assemble
    :compileTestJava
    :processTestResources
    :testClasses
    :test
    :check
    :build

    BUILD SUCCESSFUL
    其余一些较常见的任务有如下几个:
    clean
    assemble:编译并打包jar文件,但不会执行单元测试。一些其它插件可能会增强这个任务的功能,例如,如果采用了War插件,这个任务便会为你的项目打出War包。
    check:编译并测试代码
    
外部依赖 External dependencies
    通常一格java项目拥有许多外部依赖。你需要高数Gradle如何找到并引用这些外部文件。在Gradle中通常jar包都存在于仓库中。仓库可以用来搜寻依赖或发布项目产物,下面时一个采用Maven仓库的例子:
    

添加maven仓库:
        build.gradle
        repositories{
            mavenCentral()
        }
    添加依赖:
    dependencies{
        compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
        testCompile group: 'junit' , name:'junit', version:'4.+'
    }


自定义项目 customizing the project
    java插件为你的项目增加了众多默认配置,这些默认配置通常对于一格普通项目来说已经够了。但如果你觉得不适用,修改起来也很简单.下面的例子,我们为java项目指定了版本号以及所用的JDK版本,并且添加一些属性到mainfest中。
    
    自定义MAINFEST.MF

build.gradle
    sourceCompatibility = 1.5
    version = '1.0'
    jar{
        mainfest{
            attributes 'Implementation-Title':'Gradle Quickstart' , 'Implementation-Version': version
        }
    }


    java插件添加的都是一些普通任务,如同他们写在Build文件中一样,这意味着前面章节展示的机制都可以用来修改这些任务的行为。例如,可以设置任务的属性,添加任务行为,更改任务依赖,甚至是重写覆盖整个任务。
    

为test添加系统属性
    build.gradle
    test{
        systemProperties 'property':'value'
    }


    
发布jar包 Publishing the JAR file
    如何发布Jar包?你需要告诉Gradle发布到哪。在Gradle中Jar包通常被发布到某个仓库,在下面的例子,我们会将Jar包发布到本地目录。当然你也可以发布到远程仓库或者多个远程仓库中。
    

发布jar包build.gradle
    repositories{
        flatDir{
            dirs 'repos'
        }
    }


    执行gradle uploadArchives以发布jar包
    
创建Eclipes文件 Creating an Eclipes project
    若要把项目导入Eclipes中,你需要添加另外一格插件到你的脚本文件中。
    
    Eclipes plugin
    build.gradle
    apply plugin: 'eclipes'
    执行gradle eclipes来生成Eclipes项目文件
    

示例汇总:
    build.gradle
    apply plugin: 'java'
    apply plugin: 'eclipes'

    sourceCompatibility = 1.5
    version = '1.0'
    jar{
        manifrst{
            attribute 'Implementation-Title':'Gradle Quickstart', 'Implementation-Version':version
        }
    }

    repositories{
        mavenCentral()
    }

    dependencies{
        compile group: 'commons-collections' , name: 'commons-collections' , version:'3.2'
        testCompile group: 'junit' , name: 'junit' , version: '4.+' 
    }

    test{
        systemProperties 'property':'value'
    }

    uploadArchives{
        repositories{
            flatDir{
                dirs 'repos'
            }
        }
    }


    
多项目构建Multi-project Java build
    现在来看一格典型的多项目构建的例子,项目结构如下:
    Build layout:
    multiproject/
      api/
      services/webservice/
      shared/
     此处共有三个工程。api工程用来生成给客户端用的jar文件,这个jar可以为XML webservice提供java客户端。webservice是一个web项目,生成XML。shared工程包含的是前面两个共成的公用代码
    
    多项目构建定义:
        定义一格多项目构建工程需要在根目录创建一个setting配置文件来指明构建包含那些项目。并且这个文件必须较setting.gradle,本例子的配置文件如下:
        settings.gradle
        include "shared", "api", "services:webservice", "services:shared"
    
    公共配置 Common configuration
        对于多项目构建而言,总有一些共同的配置。在本例中我们会在根项目上采用配置注入的方式定义一些公共配置。根项目就像一个容器,子项目会迭代访问它的配置并注入到自己的配置中。这样我们就可以简单的为所有工程定义主配置单了
        

多项目构建-公共配置
        subprojects{
            apply plugin: 'java'
            apply plugin: 'eclipes-wtp'
        }
        repositories{
            mavenCentral()
        }
        
        depencencies{
            testCompile 'junit:junit:4.11'
        }
        
        version = '1.0'
        
        jar{
            manifrst.attributes provider: 'gradle'
        }


        值得注意的是我们为每个子项目应用了java插件,这意味着我们在前面章节学习的内容在子项目中也是可以用的,所以你可以在根项目目录进行编译,测试,打包等操作
        
    工程依赖 Dependencies between projects
        同一个构建中可以建立工程依赖。一个工程的jar包可以提供给另一个工程使用。例如我们可以让api工程依赖于shared工程的jar。这样Gradle在构建api之前总是会先构建shared工程

api/build.gradle
        dependencies{
            compile project(':shared')
        }


        

打包发布 Creating a distribution
    多项目构建-发布
    api/build.gradle
    task dist(type: Zip){
        dependsOn spiJar
        from 'src/dist'
        into('libs'){
            from spiJar.archivePath
            from configurations.runtime
        }
    }