Java Plugin拥有一些帮助你的项目完成编译,单元测试以及对你的代码进行单元测试打包等一些操作的task



如果需要使用Java Plugin 只需要在你的build.gradle中添加



apply plugin: 'java' 这样一行即可,这样短短一行会给你的项目添加很多的task



可以使用 gradle task命令来查看你的项目中有哪些task




gradle执行java代码 gradle plugin java_gradle执行java代码


Gradle 默认期望在src/main/java中去寻找你的代码,在src/test/java中去寻找你的测试代码,src/main/resources会作为classpath,所有的输出文件都会创建在build目录下,jar包最终都会在build/libs目录下


构建一个工程


使用 gradle build命令,Gradle会编译你的代码并且运行测试代码创建jar包


在gradle安装目录\samples\java\quickstart下运行gradle build命令,运行成功之后会出现一个名为build的文件夹,该文件夹目录结构如下


gradle执行java代码 gradle plugin java_jar包_02


classes文件夹存放编译之后的字节码文件,libs目录下存放打包的jar文件,reports的文件夹下存放着本次打包的测试报告,resources文件夹下存放的内容与src/main/resources文件夹内容相同,


test-results文件夹下存放的本次打包的测试结果XML形式


其他一些常用指令


gradle clean 删除build目录


gradle assemble 编译并且打jar包,但是不会运行单元测试代码,其他一些插件也有该task,比如War plugin,会为你的项目构建war包


gradle check 编译并且运行你的测试代码, 其他一些插件也有该task ,比如Code-quality plugin就会对的代码进行checkstyle操作




外部jar包依赖


一个Java工程通常会依赖于外部的jar包,Gradle可以使用Maven的仓库来获取或者发布相应的jar包。


Gradle配置Maven中央仓库


 


repositories { mavenCentral()}


添加依赖jar包


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


compile group代表编译期依赖该jar包,testCompile group 代表测试时期依赖的jar,对比maven的配置应为

gradle执行java代码 gradle plugin java_java_03

可以看出gradle的配置更为简洁


个性化配置构建参数


java plugin为你项目默认生成了许多相关的配置参数,在通常情况下这些参数的默认值都能满足你的需求,如果不能满足你的需求的话这些配置参数也可以被很容易的被修改


sourceCompatibility=1.7设置项目Java版本的兼容性为1.7


version=‘1.0’设置项目的版本号为1.0


jar { manifest { attributes 'Implementation-Title':'Gradle Quickstart','Implementation-Version': version } }


  


为jar包的manifest文件添加属性


你可以使用 gradle properties来列出当前项目的配置参数信息以及它们的值


 


发布jar包


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


  


运行 gradle uploadArchives之后会在当前目录下生产一个名为repos的目录里面有对应的jar包信息,可以通过修改dirs的方式将jar包发送到中央仓库


 


创建一个Eclipse项目


如果需要将你的项目导入到Eclipse中去,需要在build.gradle文件中加入如下配置


apply plugin:'eclipse'


然后运行gradle eclipse命令即可为你的项目生成相关的Eclipse文件


 


多Java工程构建


在Gradle安装目录的/samples/java/multiproject文件夹中有一个多工程的构建例子


api工程通过生成一个jar文件为客户端提供XML webservice服务,webservice工程是一个会返回XML格式的web工程,shared工程的代码即要被api工程调用同时webservice工程也会调用,属于一个共享服务性工程。


要构建一个多项目的Gradle工程,首先需要创建一个settings文件,这个settings文件需要跟所有Java项目位于同一级目录(如上图所示),在这个settings文件里你需要指定要构建哪些项目。这个settings文件的名字必须要


叫做settings.gradle.


settings文件内容


include "shared","api","service:webservice","service:shared"


   在多数的多工程项目中,经常会出现一些工程之间共享的配置,在multiproject的例子里,把相同的配置定义在根工程( root project 类似于Maven的父工程概念)中,利用一种叫做配置注入( configuration injection


在Gradle的理念里,根工程就相当于是一个容器,子工程就像这个容器中的一个个可以遍历的子元素,在这个“容器”下的项目被注入指定的配置。利用这种方式我们可以轻松的为所有的项目引入共同需要的依赖jar包。


   这种方式与maven parent project的概念大体一致。


在multiproject这个sample中我们可以看到相应的配置注入的定义信息


subprojects {  //定义所有子工程共同需要的配置    apply plugin: "java" //定义所有子工程使用java插件    apply plugin: "eclipse-wtp" //定义所有子工程使用Eclipse插件

     repositories {  //定义所有子工程的中央仓库
          mavenCentral()
     }

   dependencies { //定义所有子工程共同的依赖
       testCompile "junit:junit:4.11"
    }
 
   version = "1.0" //定义所有子工程的版本信息

   jar { //添加所有子工程打jar包时manifest文件的属性
      manifest.attributes provider: "gradle"
   }
}


  


在这里值得注意的是我的所有子工程都被“注入”了apply plugin: "java"的配置,这就意味着所有java plugin中的task,properties属性在每个子工程中都有


所以你可以在根工程目录下运行 gradle build命令来对所有子工程进行编译,测试,打包操作。


 


项目之间的相互依赖


在多项目工程的构建中,经常会存在一些项目之间依赖的情况,比如multiproject这个sample中api project就依赖了shared project。如果项目之间存在这个依赖关系,那么只需在相应的gradle.build文件中配置


如下一句即可


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