- 浏览: 1047746 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1441)
- 软件思想&演讲 (9)
- 行业常识 (250)
- 时时疑问 (5)
- java/guava/python/php/ruby/R/scala/groovy (213)
- struct/spring/springmvc (37)
- mybatis/hibernate/JPA (10)
- mysql/oracle/sqlserver/db2/mongdb/redis/neo4j/GreenPlum/Teradata/hsqldb/Derby/sakila (268)
- js/jquery/jqueryUi/jqueryEaseyUI/extjs/angulrJs/react/es6/grunt/zepto/raphael (81)
- ZMQ/RabbitMQ/ActiveMQ/JMS/kafka (17)
- lucene/solr/nuth/elasticsearch/MG4J (167)
- html/css/ionic/nodejs/bootstrap (19)
- Linux/shell/centos (56)
- cvs/svn/git/sourceTree/gradle/ant/maven/mantis/docker/Kubernetes (26)
- sonatype nexus (1)
- tomcat/jetty/netty/jboss (9)
- 工具 (17)
- ETL/SPASS/MATLAB/RapidMiner/weka/kettle/DataX/Kylin (11)
- hadoop/spark/Hbase/Hive/pig/Zookeeper/HAWQ/cloudera/Impala/Oozie (190)
- ios/swift/android (9)
- 机器学习&算法&大数据 (18)
- Mesos是Apache下的开源分布式资源管理框架 (1)
- echarts/d3/highCharts/tableau (1)
- 行业技能图谱 (1)
- 大数据可视化 (2)
- tornado/ansible/twisted (2)
- Nagios/Cacti/Zabbix (0)
- eclipse/intellijIDEA/webstorm (5)
- cvs/svn/git/sourceTree/gradle/jira/bitbucket (4)
- jsp/jsf/flex/ZKoss (0)
- 测试技术 (2)
- splunk/flunm (2)
- 高并发/大数据量 (1)
- freemarker/vector/thymeleaf (1)
- docker/Kubernetes (2)
- dubbo/ESB/dubboX/wso2 (2)
最新评论
工具版本:Gradle:2.2.1 Groovy:2.3.6 JVM:1.6.0_43
maven已经成为java web开发的标配,下面是一个常见的java web工程:
maven工程目录
usercenter包含两个工程,app是web工程,common是公共模块,但是app的main目录下除了java、resources、webapp之外又多了一个native2ascii的资源目录,严格来说这不符合maven约定,不过没关系,gradle除了支持maven的约定外还允许自定义java或者resources目录
下面是gradle主配置文件(删除了大部分无关紧要的依赖,能说明问题即可)
// gradle插件
buildscript {
repositories {
jcenter { url "http://jcenter.bintray.com/" }
}
dependencies {
// 远程布署插件
classpath 'org.hidetake:gradle-ssh-plugin:1.0.1'
// web容器,支持jetty和tomcat
classpath 'org.akhikhl.gretty:gretty:1.2.0'
}
}
// 全局配置,对所有工程有效
allprojects {
apply plugin: "java"
apply plugin: "idea"
apply plugin: "eclipse"
apply plugin: "maven"
group = "com.test"
version = "1.0"
// 全局属性设置
ext {
junitVersion = "4.11"
springVersion = "3.0.5.RELEASE"
// java文件编码方式设置为utf-8
compileJava.options.encoding = 'UTF-8'
compileTestJava.options.encoding = 'UTF-8'
}
}
// 所有子工程共有的配置
subprojects {
// 配置多个maven源
repositories {
mavenLocal()
mavenCentral()
maven { url "http://mirrors.ibiblio.org/pub/mirrors/maven2" }
}
// 默认情况下gradle会选用版本最高的那个依赖,有时候会带来问题
configurations.all {
// 有版本冲突的时候强制使用指定的版本,对于相关依赖也同样有效
resolutionStrategy.force(
"org.springframework:spring-core:${springVersion}",
)
}
// 公共依赖配置
dependencies {
compile(
"org.springframework:spring-core:${springVersion}",
)
testCompile(
"junit:junit:${junitVersion}",
)
}
}
// app工程配置
project(':app'){
apply plugin: 'war'
apply from: 'gretty'
// 使用gretty插件运行web工程
gretty {
httpPort = 8080
debugPort = httpPort + 1
servicePort = httpPort + 2
statusPort = httpPort + 3
httpsPort = httpPort + 4
httpsEnabled = true
contextPath = '/'
jvmArgs = ['-Xmx1024M', '-XX:PermSize=128M', '-XX:MaxPermSize=256M']
servletContainer = 'jetty7'
scanInterval = 0
inplaceMode = 'hard'
debugSuspend = false
}
// 自定义resource文件夹
sourceSets {
main {
resources.srcDirs = ['src/main/resources', 'src/main/native2ascii']
}
}
dependencies {
compile(
// 依赖common工程
project(":common"),
"javax.servlet.jsp:jsp-api:2.1",
"javax.servlet:servlet-api:2.5",
)
}
}
// common工程配置
project(':common'){
// 设置resource文件目录,引入java文件夹下的xml文件
sourceSets {
main {
resources.srcDirs = ['src/main/resources', 'src/main/java']
resources.includes = ['src/main/java/**.xml']
}
}
dependencies {
compile(
"org.mongodb:mongo-java-driver:2.10.1",
fileTree(dir: 'lib' , include: '*.jar' )
)
}
}
settings.gradle中记录子工程,内容只有一行
include 'app','common'
可以把gradle配置写到多个文件夹下,每个子工程都下都新建一个build.gradle,如果工程比较简单,也可以像上面样,所有子工程的配置都写到主工程的build.gradle中
运行的时候只需要在主工程的目录下执行一个命令即可
> gradle app:jettyRun
与maven相似,gradle也是以插件的形式来扩展功能,新增插件 apply plugin: 'jetty' ,每个插件有配置都是以代码块的形式提供,上面的配置中使用的gretty配置web容器,gretty的配置块是:
gretty {
httpPort = 8080
debugPort = httpPort + 1
servicePort = httpPort + 2
statusPort = httpPort + 3
httpsPort = httpPort + 4
httpsEnabled = true
contextPath = '/'
jvmArgs = ['-Xmx1024M', '-XX:PermSize=128M', '-XX:MaxPermSize=256M']
servletContainer = 'jetty7'
scanInterval = 0
inplaceMode = 'hard'
debugSuspend = false
}
配置简单易懂,无需多讲
这里gretty配置了jetty7做为web容器,gradle自带jetty插件(不支持java代码热布署,只能更新jsp等),配置如下:
// jetty启动配置
jettyRun {
httpPort = 8080
contextPath = ""
reload = "automatic"
scanIntervalSeconds = 1
}
上面是简单的替代maven,显然gradle能做的不只这些,得益于groovy的轻巧,gradle提供了强大的灵活性。下面看一个应用场景。
使用 org.hidetake.ssh 插件,可以把本地的war包发布到远程服务器。在 build.gradle 头部加入如下配置
// 在gradle脚本build之前起作用
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'org.hidetake:gradle-ssh-plugin:1.0.1'
}
}
buildscript用于配置不在maven仓库的插件,它在gradle脚本运行之前执行。
在ext块中配置服务器:
// 远程服务器地址
tomcatPath = '/opt/tomcat'
// 远程服务器地址
remotes {
server {
host = '192.168.1.1'
user = 'root'
password = 'root'
}
}
通常本地开发环境与服务器环境是不一致的,比如本地开发用的端口号是8080,远程服务器使用的域名和端口都不一样(由nginx转发请求),如果要在发布到远程服务器的时候替换配置文件中的域名,就可以这样。
先在ext块中配置域名对应关系
replaceUrl = [
'myapp:8080' : 'myapp:7654',
'mypartner:9090' : 'mypartner:7655',
]
再在project(':common')块中配置执行jar包阶段替换*.properties配置文件中的域名
// 如果是deploy到远程服务器,打包的时候替换域名
jar {
def replace = false
project.gradle.startParameter.taskNames.each{ command ->
if(command.contains('deploy')){
replace = true
}
}
if(replace){
filesMatching('**/*.properties') {
filter{
// it变量是filter迭代器中的默认名称,这里代表每一行
def result = it
replaceUrl.each{ key,value ->
if(it.contains(key)){
result = result.replaceAll key, value
}
}
result
}
}
}
}
这段代码是原生的groovy代码了,gradle的灵活性就体现在这里了,关于groovy语言,大家自行脑补。
project.gradle.startParameter.taskNames是gradle命令行参数,如gradle clean app:deploy,那么命令行参数就是['clean', 'app:deploy']
filesMatching('**/*.properties') 是过滤所有的以properties结尾的文件,**是递归查找。接下来是布署代码了:
// 布署至远程服务器,上传的war名为app.war
task deploy(dependsOn: war) << {
ssh.run {
session(remotes.server) {
put "$war.archivePath.path", "$tomcatPath/webapps/app.war"
execute "$tomcatPath/bin/shutdown.sh"
execute "rm -rf $tomcatPath/webapps/ROOT/*"
execute "unzip -oq $tomcatPath/webapps/app.war -d $tomcatPath/webapps/ROOT"
execute "rm -f $tomcatPath/webapps/app.war"
execute "$tomcatPath/bin/startup.sh"
}
}
}
deploy只是简单的执行shell命令,上传war包,关闭tomcat,解压war,删除war,启动tomcat。
布署命令:gradle clean app:deploy
maven已经成为java web开发的标配,下面是一个常见的java web工程:
maven工程目录
usercenter包含两个工程,app是web工程,common是公共模块,但是app的main目录下除了java、resources、webapp之外又多了一个native2ascii的资源目录,严格来说这不符合maven约定,不过没关系,gradle除了支持maven的约定外还允许自定义java或者resources目录
下面是gradle主配置文件(删除了大部分无关紧要的依赖,能说明问题即可)
// gradle插件
buildscript {
repositories {
jcenter { url "http://jcenter.bintray.com/" }
}
dependencies {
// 远程布署插件
classpath 'org.hidetake:gradle-ssh-plugin:1.0.1'
// web容器,支持jetty和tomcat
classpath 'org.akhikhl.gretty:gretty:1.2.0'
}
}
// 全局配置,对所有工程有效
allprojects {
apply plugin: "java"
apply plugin: "idea"
apply plugin: "eclipse"
apply plugin: "maven"
group = "com.test"
version = "1.0"
// 全局属性设置
ext {
junitVersion = "4.11"
springVersion = "3.0.5.RELEASE"
// java文件编码方式设置为utf-8
compileJava.options.encoding = 'UTF-8'
compileTestJava.options.encoding = 'UTF-8'
}
}
// 所有子工程共有的配置
subprojects {
// 配置多个maven源
repositories {
mavenLocal()
mavenCentral()
maven { url "http://mirrors.ibiblio.org/pub/mirrors/maven2" }
}
// 默认情况下gradle会选用版本最高的那个依赖,有时候会带来问题
configurations.all {
// 有版本冲突的时候强制使用指定的版本,对于相关依赖也同样有效
resolutionStrategy.force(
"org.springframework:spring-core:${springVersion}",
)
}
// 公共依赖配置
dependencies {
compile(
"org.springframework:spring-core:${springVersion}",
)
testCompile(
"junit:junit:${junitVersion}",
)
}
}
// app工程配置
project(':app'){
apply plugin: 'war'
apply from: 'gretty'
// 使用gretty插件运行web工程
gretty {
httpPort = 8080
debugPort = httpPort + 1
servicePort = httpPort + 2
statusPort = httpPort + 3
httpsPort = httpPort + 4
httpsEnabled = true
contextPath = '/'
jvmArgs = ['-Xmx1024M', '-XX:PermSize=128M', '-XX:MaxPermSize=256M']
servletContainer = 'jetty7'
scanInterval = 0
inplaceMode = 'hard'
debugSuspend = false
}
// 自定义resource文件夹
sourceSets {
main {
resources.srcDirs = ['src/main/resources', 'src/main/native2ascii']
}
}
dependencies {
compile(
// 依赖common工程
project(":common"),
"javax.servlet.jsp:jsp-api:2.1",
"javax.servlet:servlet-api:2.5",
)
}
}
// common工程配置
project(':common'){
// 设置resource文件目录,引入java文件夹下的xml文件
sourceSets {
main {
resources.srcDirs = ['src/main/resources', 'src/main/java']
resources.includes = ['src/main/java/**.xml']
}
}
dependencies {
compile(
"org.mongodb:mongo-java-driver:2.10.1",
fileTree(dir: 'lib' , include: '*.jar' )
)
}
}
settings.gradle中记录子工程,内容只有一行
include 'app','common'
可以把gradle配置写到多个文件夹下,每个子工程都下都新建一个build.gradle,如果工程比较简单,也可以像上面样,所有子工程的配置都写到主工程的build.gradle中
运行的时候只需要在主工程的目录下执行一个命令即可
> gradle app:jettyRun
与maven相似,gradle也是以插件的形式来扩展功能,新增插件 apply plugin: 'jetty' ,每个插件有配置都是以代码块的形式提供,上面的配置中使用的gretty配置web容器,gretty的配置块是:
gretty {
httpPort = 8080
debugPort = httpPort + 1
servicePort = httpPort + 2
statusPort = httpPort + 3
httpsPort = httpPort + 4
httpsEnabled = true
contextPath = '/'
jvmArgs = ['-Xmx1024M', '-XX:PermSize=128M', '-XX:MaxPermSize=256M']
servletContainer = 'jetty7'
scanInterval = 0
inplaceMode = 'hard'
debugSuspend = false
}
配置简单易懂,无需多讲
这里gretty配置了jetty7做为web容器,gradle自带jetty插件(不支持java代码热布署,只能更新jsp等),配置如下:
// jetty启动配置
jettyRun {
httpPort = 8080
contextPath = ""
reload = "automatic"
scanIntervalSeconds = 1
}
上面是简单的替代maven,显然gradle能做的不只这些,得益于groovy的轻巧,gradle提供了强大的灵活性。下面看一个应用场景。
使用 org.hidetake.ssh 插件,可以把本地的war包发布到远程服务器。在 build.gradle 头部加入如下配置
// 在gradle脚本build之前起作用
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'org.hidetake:gradle-ssh-plugin:1.0.1'
}
}
buildscript用于配置不在maven仓库的插件,它在gradle脚本运行之前执行。
在ext块中配置服务器:
// 远程服务器地址
tomcatPath = '/opt/tomcat'
// 远程服务器地址
remotes {
server {
host = '192.168.1.1'
user = 'root'
password = 'root'
}
}
通常本地开发环境与服务器环境是不一致的,比如本地开发用的端口号是8080,远程服务器使用的域名和端口都不一样(由nginx转发请求),如果要在发布到远程服务器的时候替换配置文件中的域名,就可以这样。
先在ext块中配置域名对应关系
replaceUrl = [
'myapp:8080' : 'myapp:7654',
'mypartner:9090' : 'mypartner:7655',
]
再在project(':common')块中配置执行jar包阶段替换*.properties配置文件中的域名
// 如果是deploy到远程服务器,打包的时候替换域名
jar {
def replace = false
project.gradle.startParameter.taskNames.each{ command ->
if(command.contains('deploy')){
replace = true
}
}
if(replace){
filesMatching('**/*.properties') {
filter{
// it变量是filter迭代器中的默认名称,这里代表每一行
def result = it
replaceUrl.each{ key,value ->
if(it.contains(key)){
result = result.replaceAll key, value
}
}
result
}
}
}
}
这段代码是原生的groovy代码了,gradle的灵活性就体现在这里了,关于groovy语言,大家自行脑补。
project.gradle.startParameter.taskNames是gradle命令行参数,如gradle clean app:deploy,那么命令行参数就是['clean', 'app:deploy']
filesMatching('**/*.properties') 是过滤所有的以properties结尾的文件,**是递归查找。接下来是布署代码了:
// 布署至远程服务器,上传的war名为app.war
task deploy(dependsOn: war) << {
ssh.run {
session(remotes.server) {
put "$war.archivePath.path", "$tomcatPath/webapps/app.war"
execute "$tomcatPath/bin/shutdown.sh"
execute "rm -rf $tomcatPath/webapps/ROOT/*"
execute "unzip -oq $tomcatPath/webapps/app.war -d $tomcatPath/webapps/ROOT"
execute "rm -f $tomcatPath/webapps/app.war"
execute "$tomcatPath/bin/startup.sh"
}
}
}
deploy只是简单的执行shell命令,上传war包,关闭tomcat,解压war,删除war,启动tomcat。
布署命令:gradle clean app:deploy
发表评论
-
研发管理工具
2017-08-09 15:26 485一、产品介绍 JIRA是Atlas ... -
webstorm的html文件如何不折叠style?
2016-06-27 17:16 660webstorm的html文件如何不 ... -
持续集成工具的发展历程以及未来
2016-04-24 01:08 650持续集成工具的发展历程以及未来 原创 2016-04- ... -
maven POM.xml 标签详解
2016-01-04 00:25 743<span style="margin: 0 ... -
mvn的常用命令
2016-01-04 00:26 10001. mvn help:describe 你是否因为记不清 ... -
maven的assemble的使用
2016-01-04 00:27 1016在开发Maven项目中,我们可能有各种各样的打包需求,当然 ... -
Gradle是一款非常简洁的项目构建工具
2016-01-03 00:01 803Gradle是一款非常简洁的项目构建工具,相比ant和ma ... -
Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器
2016-01-15 10:31 624Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编 ... -
Markdown的语法简洁明
2016-01-22 14:29 826GitBook[1] 是一个基于 Node.js 的命令行工 ... -
eclipse的使用
2015-12-31 12:01 463eclipse的快捷键 Ctrl + Shift + X 将小 ... -
Stack Overflow
2015-12-30 10:55 569Stack Overflow是一个与程序相关的IT技术问答网站 ... -
flyway的使用
2015-12-29 21:42 1136前言:最近工作上遇到个问题,项目开发过程中,开发代码可以通过s ... -
Gradle和Maven
2015-12-29 19:38 560Gradle和Maven都是项目自动构建工具,编译源代码只是整 ... -
maven出现感叹号
2015-12-16 14:51 545maven出现感叹号的原因 产生原因: 因为一些maven管 ... -
Gradle项目构建工具
2015-12-10 01:02 685Gradle是一款非常简洁的项目构建工具,相比ant和mave ... -
使用的工具
2015-11-30 15:31 4451.Fiddler是一个http协议调试代理工具,它能够记录并 ...
相关推荐
**Gradle使用文档详解** Gradle是一款强大的自动化构建工具,主要应用于Java项目,但同时也支持其他编程语言,如Groovy、Kotlin、C++等。它以其灵活性、可扩展性和高性能而闻名,允许开发者通过声明式的方式定义...
gradle是一种新的版本构建工具,集合了ant、maven及ivy的优势,具有配置简单,功能丰富等特征,提供多种默认项目布局,本文档是一个方便学习的实践教程。只要能按照教程一步一步走下来,就能很好地掌握gradle这个...
android studio 配置gradle 使用android.mk进行编译jni,简单的jni调用,使用android.mk进行编译,注意事项:app下的gradle,以及编译生成的 .h文件,复制修改为 .cpp时,里面的文件的宏逻辑,最好去掉这个宏(#...
**Gradle 使用指南** ...通过阅读《Gradle使用指南》PDF版,开发者能够全面了解Gradle的各个方面,掌握构建自动化的核心技能,从而提升项目管理和开发效率。无论是新手还是经验丰富的开发者,都能从中受益匪浅。
3. **本地仓库管理**:可以指定Gradle使用Maven的本地仓库,这样Gradle构建时可以将依赖统一管理在Maven的仓库路径下。 4. **节省磁盘空间**:避免了在Gradle和Maven各自的仓库中重复存储相同的依赖包。 接下来,...
本文侧重于了解自定义properties文件,以及properties中的数据格式,在gradle中如何使用等知识点。 一、概述 在Android Studio 创建一个项目的时候,rootProject下面会生成gradle.properties和local.properties文件...
Gradle使用进阶入门介绍Gradle Plugin User Guide gradle配置向导Gradle key配置方法拥抱 Android Studio
1.gradle基本介绍 2.gradle构建一个java项目 3.gradle构建一个Android项目与编译打包. 4.gradle的多渠道打包 5.gradle依赖管理 ......................
1、gradle8.7 2、gradle-8.7-bin 3、gradle--8.7 4、什么是Gradle? Gradle是一个开源构建自动化工具,专为大型项目设计。它基于DSL(领域特定语言)...性能:Gradle使用它的守护程序和增量构建技术来提高构建速度。
- 这是一个用于简化Gradle安装和版本管理的工具,确保团队成员使用相同版本的Gradle。 9. **Gradle IDE 集成**: - Gradle 可以与IntelliJ IDEA、Eclipse等IDE无缝集成,提供自动构建和调试功能。 10. **持续...
1.1 什么是Gradle? Gradle是一个开源构建自动化工具,专为大型项目设计。它基于DSL(领域特定语言)编写,该语言是用Groovy编写的,使得构建脚本更加...性能:Gradle使用它的守护程序和增量构建技术来提高构建速度。
1. **基于Groovy的DSL**:Gradle使用Groovy语言作为构建脚本的基础,提供了一种简洁、面向对象的语法,使得构建脚本易于阅读和编写,同时具备动态语言的灵活性。 2. **依赖管理**:Gradle的依赖管理系统能够自动...
6. **缓存机制**:Gradle使用本地和远程缓存来存储已下载的依赖和构建结果,避免不必要的网络请求和重复工作。 7. **自定义任务**:开发者可以创建自定义任务,实现特定的构建需求,如生成报告、打包、测试等。 8....
Gradle使用Groovy或Kotlin DSL编写构建脚本,这使得脚本具有高度的可读性和可扩展性。理解任务和依赖关系是掌握Gradle的关键,这些内容将帮助你构建出高效的构建流程。 2. **Android插件**:Android插件是Gradle与...
2. **DSL(领域特定语言)**:Gradle使用Groovy方言的DSL,使得构建脚本可读且易于编写。通过`build.gradle`文件,开发者可以定义项目结构、依赖关系、构建变体等。 3. **依赖管理**:Gradle强大的依赖管理系统允许...
要使用Gradle,你需要将`bin`目录添加到系统PATH环境变量,或者使用解压后的`gradlew`(Windows)或`./gradle`(Unix-like系统)脚本来运行Gradle命令。 总的来说,Gradle 6.1.1 提供了高效的构建解决方案,结合其...
- **基于Groovy的DSL**:Gradle 使用Groovy语言设计的领域特定语言(DSL),使得构建脚本易于阅读和编写,具有灵活性和表达力。 - **依赖管理**:Gradle 提供强大的依赖解析和管理功能,可以自动下载项目所需的...
- "gradle-7.4.1" 包含了 Gradle 包装器,它是一个小脚本,用于确保团队成员都使用相同版本的 Gradle。 - 这有助于保持构建的一致性,并避免因本地 Gradle 版本不匹配而产生的问题。 7. **命令行界面**: - 用户...