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的自动化流程。

来源:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421544.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java缺省包详解_Java在其它包中无法引用缺省包中的类

1、现象1.1 问题场景最近&#xff0c;在写测试代码时&#xff0c;将一个类(这里暂且称为ClassA)放在在缺省包中&#xff0c;也就是说&#xff0c;直接放在了src目录下&#xff0c;没有创建包。然后&#xff0c;将这个类打入了jar文件&#xff0c;提供给另外的工程(这里称为Proj…

myeclipse开发代码颜色搭配保护视力

废话不多说&#xff0c;这个东西主要是为了保护视力的&#xff0c;另外我也挺喜欢上边的颜色搭配的&#xff0c;今天特拿出来分享。直接上图 转载于:https://www.cnblogs.com/suncoolcat/p/3293895.html

linux下qt5静态编译器_笔记-linux下Qt5.3.2 静态编译

这里主要讲linux下的编译&#xff0c;windows下面比较简单依赖sudo apt-get install"^libxcb.*"libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev编译选项configure -confirm-license -opensource -static -release -no-qml-debug -qt-freetype -qt-xcb -n…

猜字小游戏java方法体_java实现猜字小游戏

闲来无事&#xff0c;实现一个猜数字的小游戏&#xff0c;目的是巩固自己的基础知识&#xff0c;培养敲代码的乐趣。首先在项目中所创建的类中导包(视频教程推荐&#xff1a;java课程)import java.util.Scanner;//一个简单的文本扫描器&#xff0c;可以使用正则表达式解析原始类…

Aixs2发布webservice服务

http://www.blogjava.net/pzxsheng/archive/2012/12/21/393319.html 开发前准备&#xff1a; 1、Eclipse Java EE IDE&#xff08;Juno Service Release 1&#xff09;&#xff0c;这个必须是for J2EE 的IDE&#xff0c;因为发布webservice的插件所需。 下载地址&…

快照java开源_maven快照版本和发布版本

在使用maven过程中&#xff0c;我们在开发阶段经常性的会有很多公共库处于不稳定状态&#xff0c;随时需要修改并发布&#xff0c;可能一天就要发布一次&#xff0c;遇到bug时&#xff0c;甚至一天要发布N次。我们知道&#xff0c;maven的依赖管理是基于版本管理的&#xff0c;…

java里的sleuth_java基础之spring cloud微服务快速教程之(十一) Sleuth(zipkin) 服务链路追踪...

0、前言微服务架构上众多微服务通过REST调用&#xff0c;可能需要很多个服务协同才能完成一个接口功能&#xff0c;如果链路上任何一个服务出现问题或者网络超时&#xff0c;都会形成导致接口调用失败。随着业务的不断扩张&#xff0c;服务之间互相调用会越来越复杂。如何清晰地…

opengl模板缓冲区

相信大家有些人对opengl的模板缓冲区不是很理解&#xff0c;包括我最开始也是&#xff0c;opengl的模板缓冲区其实就是采用过滤的技术来控制那些颜色可以绘制&#xff0c;那些不能进行绘制。这里的过滤技术也就是我们的一个控制方法&#xff0c;主要体现在如下两个函数glStenci…

vue在java中的应用_开发知识-Vue篇:在Vue应用中集成O2OA

在前面的章节中&#xff0c;我们介绍了两种在O2OA中使用Vue开发应用的方式&#xff0c;已经可以满足绝大多数的情况了。如果您考虑完全脱离O2的web服务器&#xff0c;自己搭建web服务器&#xff0c;那就请阅读本章。我们还是使用Vue的Vue-CLI工具&#xff0c;创建Vue应用&#…

C++ 虚函数在基类与派生类对象间的表现及其分析

近来看了侯捷的《深入浅出MFC》&#xff0c;读到C重要性质中的虚函数与多态那部分内容时&#xff0c;顿时有了疑惑。因为书中说了这么一句&#xff1a;使用“基类之指针”指向“派生类之对象”&#xff0c;由该指针只能调用基类所定义的函数&#xff0c;如果要让基类的指针使用…

php评论盖楼怎么实现,dedecms评论盖楼实现楼层数,类似腾讯、网易的评论(5.5/5.6版)...

DEDE评论效果&#xff1a;修改后的效果&#xff1a;修改步骤一、织梦dedecms5.5版本(5.6版本请往下看)1、修改/plus/feedback_ajax.php文件的第131行(如果你没改过)下面是修改之前的代码&#xff1a;$qmsg {quote}{title}.$row[username]. 的原帖&#xff1a;{/title}{content…

datagridview绑定与详细说明 (搜集)

1、实现一个用于处理数据库教程数据检索的详细信息的方法。 下面的代码示例实现一个 getdata 方法&#xff0c;该方法对一个 sqldataadapter 组件进行初始化&#xff0c;并使用该组件填充 datatable。 然后&#xff0c;将 datatable 绑定到 bindingsource 组件。请确保将 conne…

matlab显示二值直方图,图像灰度变换、二值化、直方图

1、灰度变换1)灰度图的线性变换Gnew Fa * Gold Fb。Fa为斜线的斜率&#xff0c;Fb为y轴上的截距。Fa>1 输出图像的对比度变大&#xff0c;否则变小。Fa1 Fb≠0时&#xff0c;图像的灰度上移或下移&#xff0c;效果为图像变亮或变暗。Fa-1&#xff0c;Fb255时&#xff0c;发…

blender怎么移动骨骼,Blender学习笔记-(015)创建骨骼绑定及权重绘制操作详解

骨骼创建绑定具体操作如下&#xff1a;1&#xff1a; 【ShiftA】创建基础骨骼。(也可以通过打开Blender的插件Rigging&#xff1a;Rigify&#xff0c;生成自定义骨骼)2&#xff1a;点击骨骼&#xff0c;按【Tab】键进入编辑模式&#xff0c;选中创建骨骼端&#xff0c;按【E】拖…