bae java上传图片_干货分享:gradle+svn轻松搞定BAE java代码上传

背景

在BAE基础版和专业版上,java应用通过war包文件部署的时候,总会遇到一些小麻烦:

BAE专业版的svn/git有单文件40M的限制,所以在专业版的svn/git中上传超过40M的war包(很多war包都会超过40M)是不可行的

BAE基础版的svn/git,以及BAE专业版的打包上传,虽然没有单文件大小限制(BAE基础版的svn/git有所有文件加起来不能超过100M的限制),但是每次有任何改动,都需要上传整个war包,导致每次上传耗时很长

解决的办法很简单:将war包中的文件,解压到BAE专业版或基础版的svn/git中的ROOT目录下(tomcat为ROOT目录,jetty为root目录),再上传。

这样,既能避免了BAE专业版svn/git单文件40M的限制(war包中解压出来的文件一般不超过40M),也能避免每次都要上传整个war包的问题(只需要上传war包中有变化的文件,像依赖的jar包文件一般都是不会发生变化的)。

本文主要介绍,如何通过构建工具gradle,实现打war包、解压war包、上传svn的自动化流程。

注:本文并不包含gradle的使用教程,如果你并不熟悉gradle,建议阅读以下gradle入门系列文章:

方案

要实现打war包、解压war包、上传svn的自动化流程,只需要在gradle的构建脚本build.gradle中增加一段脚本,并执行gradle publish命令即可。

首先,在build.gradle中增加以下内容:

// 使用war插件打war包

apply plugin: 'war'

// svnUrl为BAE基础版或专业版的svn地址,可在控制台复制获得

def svnUrl = 'https://svn.bce.baidu.com/.../'

task updateSvn << {

if (file('svn').exists()) {

exec {

workingDir 'svn'

commandLine 'svn', 'update'

}

} else {

exec {

commandLine 'svn', 'checkout', svnUrl, 'svn'

}

}

}

task cleanSvn(dependsOn: ['updateSvn']) << {

file('svn').listFiles().findAll { it.name != '.svn' }.each {

delete it

}

}

task unzipWar(type: Copy, dependsOn: ['cleanSvn', 'war']) {

into 'svn/ROOT'

from zipTree(tasks.war.archivePath)

}

task publish(dependsOn: unzipWar) << {

def stdout = new ByteArrayOutputStream()

exec {

workingDir 'svn'

commandLine 'svn', 'status'

standardOutput = stdout

}

def status = stdout.toString().readLines()

status.each {

def filename = it[it.indexOf(' ')..-1].trim()

if (it.startsWith('?')) {

exec {

workingDir 'svn'

commandLine 'svn', 'add', filename

}

} else if (it.startsWith('!')) {

exec {

workingDir 'svn'

commandLine 'svn', 'rm', filename

}

}

}

exec {

workingDir 'svn'

commandLine 'svn', 'commit', '-m', System.getProperty('message')

}

}

需要上传时,只需要在命令行中执行以下指令(其中“{svn-ci-message}”为svn的commit信息):

$ gradle publish –Dmessage=”{svn-ci-message}”

工作原理

我们通过下图来看看上面的构建脚本是如何执行的:

gradle-tasks.png

updateSvn:如果项目目录下没有svn目录,则通过svn checkout命令,将BAE的svn库中的内容下载下来;如果有svn目录,则通过svn update命令,将该目录中的文件更新到最新版本

cleanSvn:将svn目录中,除了.svn(存放svn的元数据)外的文件和目录都删除掉。这一步是为了保证war包中已删除的文件,在svn中也能被删除

war:由gradle提供的打war包的命令

unzipWar:将步骤3打出的war包,解压到svn/ROOT目录下

publish:这个步骤又分为3步:

通过svn status目录,列出svn目录下的文件变化

对于新增的文件调用svn add命令;对于已删除的文件调用svn rm命令

调用svn commit命令,将变化的部分上传到svn

总结

本文介绍了通过解压war包并上传到svn/git的办法,避免了BAE专业版svn/git单文件40M的限制,以及每次都要上传整个war包的问题。本文还提供了一个gradle的构建脚本,上传代码时只需要执行gradle publish命令,就能实现打war包、解压war包、上传svn的自动化流程。

来源:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值