Gradle是一个基于Groovy实现的,类似于Ant工具的项目构建文件,其设计目标是用更简单的语法和方式来配置一个项目的构建,而不需要像Ant工具一样那么麻烦 。
如何配置Gradle:
下载Gradle解压到自定义文件夹
配置环境变量:GRADLE_HOME
添加%GRADLE_HOME%到Path中
测试 gradle -v 输出正常表示配置成功
用Gradle 打包项目
构建 build.gradle 文件
一个简单的gradle build文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| apply plugin: 'java'
version = '1.0.0'
repositories {
mavenLocal()
mavenCentral()
maven{
url "https://oosnmp.net/dist/release"
}
}
dependencies {
compile 'org.snmp4j:snmp4j:2.3.3'
}
jar {
manifest{
attributes 'Title': 'SNMPFramework', 'Version' : 1.0, 'Author':'LuoYuan'
}
metaInf {
from('..') {
include '*.md'
}
includeEmptyDirs = false
}
}
sourceSets{
main {
java{
srcDir 'src'
}
}
}
task javaDoces(type: Javadoc){
source = sourceSets.main.allJava
}
|
这个build文件表示这个项目的依赖关系,还有从什么地方获取依赖包。
dependencies 标签定义编译代码的时候要依赖的jar包
Gradle会尝试从repositories获取依赖的jar包 ,然后放到user/.gradle的文件目录下缓存,下次build的时候直接从这个地方获取。
task 标签定义一个新的task, 可以通过gradle <task> 运行。
sourceSet标签指定项目的源代码结果,如果不配置的话会是用默认的结构 src/main/java作为源文件的存放位置。
jar 标签定义执行build之后生成的jar包目录结构,可以配置jar包中manifest文件的内容。
metaInf 标签定义在生产的jar包中 META-INF 目录要放入的文件。
Gradle 构建war项目:
默认的项目结构:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| .
├── build.gradle
└── src
└── main
├── java
│ └── com
│ └── manning
│ └── gia
│ └── todo
│ ├── model
│ │ └── ToDoItem.java
│ ├── repository
│ │ ├── InMemoryToDoRepository.java
│ │ └── ToDoRepository.java
│ └── web
│ └── ToDoServlet.java
└── webapp-------------------------------------------------#A
├── WEB-INF
│ └── web.xml----------------------------------------#B
├── css------------------------------------------------#C
│ ├── base.css
│ └── bg.png
└── jsp------------------------------------------------#D
├── index.jsp
└── todo-list.jsp
|
#A Web源文件默认目录
#B Web应用描述符文件
#C 存储描述如何展现HTML元素的样式单文件的目录
#D 存放JSP形式的动态脚本化视图组件
一个简单脚本示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| apply plugin: 'war'
version = '1.0.0'
apply plugin: 'jetty'
httpPort = 8888
repositories {
mavenLocal()
mavenCentral()
}
war {
manifest{
attributes 'Title': 'SNMPFrameworkUI', 'Version' : 1.0, 'Author':'LuoYuan'
}
metaInf {
from('.') {
include '**/*.md'
}
includeEmptyDirs = false
}
}
|
标签含义介绍
apply plugin:’jetty’ 指定是用jetty作为运行war的容器,当运行
可以启动jetty 然后自动部署当前的war包进行测试。
httpPort 这个属性指定jetty运行的时候使用的端口,默认为8080。
使用gradle关联本地的jar包
repositories {
flatDir{
dirs 'src/main/webapp/WEB-INF/lib'
}
}
- 然后需要将jar包放到对应的目录,并且在build文件中增加
dependencies {
compile ([':name:version'],[':name:version'])
}
gradle 中直接使用ant
一种方式是可以直接在gradle的build中直接调用ant相关的命令,比如:
1 2 3 4 5 6 7 8
| task zip << { ant.zip(destfile: 'archive.zip') { fileset(dir: 'src') { include(name: '**.xml') exclude(name: '**.java') } } }
|
也可以直接导入现有的antbuild文件(build.xml)
可以同时给ant trarget name 加上前缀,这样可以避免出现同名的错误。
这个引入的ant 中定义的target放在other的group下面。
1 2 3
| ant.importBuild('build.xml') { antTargetName -> 'ant-'+antTargetName }
|