Gradle学习(二) Java Plugin

Java Plugin拥有一些帮助你的项目完成编译,单元测试以及对你的代码进行单元测试打包等一些操作的task
如果需要使用Java Plugin 只需要在你的build.gradle中添加
apply plugin: 'java' 这样一行即可,这样短短一行会给你的项目添加很多的task
可以使用gradle task命令来查看你的项目中有哪些task
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的文件夹,该文件夹目录结构如下
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 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")
}

  

 

posted on 2014-05-29 23:03  Gospel_Ye  阅读(1468)  评论(0编辑  收藏  举报

导航