ANT公布SVN WEB项目到TOMCAT以及利用post-commit自己主动提交编译更新
开发者在本地提交更新到SVNserver后。往往须要測试人员又一次測试。为了将更新内容即时反映到測试server。能够利用post-commit脚本将SVN更新同步到測试server中。
(1)利用SVN的工作副本(WORKINGCOPY)创建TOMCATWEB项目
cd /opt/tomcat_home/webapps
svn co svn://svn_host/prjname/trunk prjname
改动tomcat的配置文件server.xml,在HOST标签中加入例如以下内容
<Context crossContext="false" path="/prjname" docBase="prjname/WebContent/" reloadable="true"></Context>
在上述配置文件里,
path指明的是通过浏览器訪问该项目网页时在serverIP及訪问PORT后的路径。比如通过本地server訪问该网页时的訪问URL应为http://localhost:8080/prjname。假设指明path=””,则表明訪问http://localhost:8080/时自己主动引导到docBase指定的项目。
docBase指明WEB项目的相对路径或绝对路径。比如上述例示中指明相对路径为HOST标签所指定的appBase下prjname/WebContent文件夹。
须要注意的是文件夹的名字能够为不论什么有效文件夹名。但tomcat的WEB项目必须遵照特定的文件夹结构存放。
web_home ++
|-- index.html
|-- webpage_files
|++ webpage_folder
|-- webpage_files
|++ javascript_folder
|-- javascript_files
|++ css_folder
|-- css_files
|++ META-INF
|-- MAINFEST.INF
|++ WEB-INF
|++ classes
|-- class_files
|++ lib
|-- jar_lib_files
|-- web.xml
静态页面(*.html,*.js and*.jsp等)文件或目录放在WEB根目录(prjname/WebContent)下。编译后的类文件放在prjname/WebContent/WEB-INF/classes目录下;项目配置文件比如db.properites和web.xml等放在prjname/WebContent/WEB-INF/目录下。tomcat载入WEB项目时,会读入并分析这些配置文件,初始化一些执行配置。
WEB-INF/目录下的资源和文件时不能被client通过URL訪问。项目所用的库文件放在prjname/WebContent/WEB-INF/lib目录下,但注意这里的库文件不能和TOMCAT自带的库文件反复,否则,在生成库中的类的类对象时,会出现类定义冲突。
TOMCAT依照上述文件结构解析WEB项目。
其实,将WEB项目打包成WAR文件公布时。也必须安装上述结构组织源文件,而TOMCAT解压WAR文件后形成的WEB项目,和这里手动公布的WEB项目应是一样的。
须要注意到是,利用svn checkout构建WEB项目。一般仅仅适用于构建測试环境的情况。实际公布为产品时,应使用svn export导出不含更新配置文件的干净版本号后。最好打包成WAR文件公布。
(2)编写ANT编译文件
<?xml version="1.0" encoding="UTF-8"? >
<!-- default 指定ANT无參数执行时的target -->
<project name="prjname" default="compile" basedir=".">
<!-- value指定目标项目根文件夹。"."则表示prjname.home为本build.xml所在文件夹。 以标准eclipse WEB项目为例。本例build.xml应位于项目根文件夹prjname下 -->
<property name="prjname.home" value="."/> <property name="prjname.name" value="prjname"/> <property name="tomcat.home" value="/opt/tomcat7"/> <!-- home of web pages -->
<!-- WEB 根文件夹 -->
<property name="web.home" value="${prjname.home}/WebContent"/> <!-- home of java source files -->
<!-- 待编译的源文件文件夹。eclipse标准WEB项目位于项目根文件夹下 -->
<property name="src.home" value="${prjname.home}/src"/> <!-- home of class files after compile -->
<!-- 编译后的CLASS文件。依照WEB项目特定文件组织结构放置 -->
<property name="classes.home" value="${web.home}/WEB-INF/classes"/> <!-- home of lib for build --> <property name="lib.home" value="${web.home}/WEB-INF/lib"/> <property name="work.home" value="${tomcat.home}/work/Catalina/localhost"/> <path id="compile.classpath"> <pathelement location="${classes.home}"/> <fileset dir="${lib.home}"> <include name="*.jar"/> </fileset> <fileset dir="${tomcat.home}/lib"> <include name="*.jar"/> </fileset> <pathelement location="${tomcat.home}/common/classes"/> </path> <target name="help"> <echo message="Please specify a target! [usage:ant targetname]"/> <echo message="Here is a list of possible targets:"/> <echo message=" perpare....Creates directories if required"/> <echo message=" compile....Compiles source files"/> </target> <target name="prepare" > <tstamp/> <echo message="Ant vereion: ${ant.version}"/> <echo message="JDK version: ${java.runtime.version}"/> <echo message="Tomcat Home=${tomcat.home}"/> <echo message="Webapps Home=${webapps.home}"/> <echo message="classes Home=${classes.home}"/> <echo message="Java src Home=${src.home}"/> <!-- mkdir do nothing is the directory already exists. --> <mkdir dir="${lib.home}"/> <mkdir dir="${classes.home}"/> </target> <target name="compile" depends="prepare"> <javac srcdir="${src.home}" destdir="${classes.home}" includeantruntime="on" debug="true"> <compilerarg line="-encoding UTF-8"/> <classpath refid="compile.classpath"/> </javac> </target> </project>
将该ANT编译文件放在第1步从SVN导入TOMCAT的WEB项目根文件夹下,并运行
ant compile
后,即完毕了WEB项目的公布工作。检查WEB根文件夹下的WEB-INF/classes文件夹,会发现ANT已经编译了JAVA源文件。生成了对应的CLASS文件。正常启动WEB相关server后。就可以使用WEB服务了。
(3)post-commit自己主动提交更新和ANT编译更新
post-commit位于SVN项目目录下的子目录hooks中。使用svnadmin创建SVN项目时,将自己主动创建前述的hooks目录并生成例示的post-commit.tmpl等文件。
复制post-commit.tmpl并改名为post-commit后编辑该文件例如以下。另外利用SVN的钩子(pre-commit)还能够写出非常多的程序来控制SVN如代码提交前查看是否有写日志,是否有tab,有将换成空格。是否有不允许上传的文件,是否有超过大小限制的文件等等。
REPOS="$1"
REV="$2"
SVNLOOK=/usr/bin/svnlook DES=/opt/tomcat7/webapps/prjname
SVNUSER=svn_user
SVNPW=svn_pw
# FILTER推断更新文件的类别。假设是*.html, *.js或*.jsp文件,则无须启用ANT又一次编译
# 实际这样做的用处并不大,ANT自己主动对照文件的编译日期和最后修改日期,推断是否须要又一次编译
FILTER='\.(html|htm|js|jsp)$' export LANG=en_US.UTF-8 svn update $DES --username $SVNUSER --password $SVNPW changes=$($SVNLOOK changed $REPOS | awk '{print $1 "=" $2;}')
for file in $changes
do
#写入提交日志
DATE=`date '+%Y-%m-%d %H:%M:%S'`
AUTHOR="$($SVNLOOK author -r $REV $REPOS)"
echo $DATE $file "committed by '$AUTHOR'" >> ./log.txt
# check file type
if echo $file | grep -Eq $FILTER;
then continue
else
echo $DATE "compile" >> ./commit_log.txt
ant compile -buildfile ${DES}/build.xml
break
fi
done
保存后须要给该文件添加可运行权限。
chmod +x post-commit
在开发者运行commit操作之后,SVNserver会自己主动运行post-commit钩子程序。先更新TOMCAT中的工作副本。然后编译须要编译的文件。这样以来,*.html,*.js或*.jsp等文件的更新操作,就可以在刷新对应的WEB页面之后即时反映,而*.java文件的更新则可能须要又一次TOMCATserver后才干反映到业务逻辑中。
ANT公布SVN WEB项目到TOMCAT以及利用post-commit自己主动提交编译更新的更多相关文章
- 在eclipse中公布maven的多模块web项目到tomcat上及单步debug模块jar
1.在eclipse中公布maven的多模块web项目到tomcat eclipse和maven及tomcat的部署略去,还有maven的基础知识和使用在此处略去. 依照例如以下的步骤操作: 将lib ...
- Eclipse部署Maven web项目到tomcat服务器时,没有将lib下的jar复制过去的解决办法
我们在做web开发是,经常都要在eclipse中搭建web服务器,并将开发中的web项目部署到web服务器进行调试,在此,我选择的是tomcat服务器.之前部署web项目到tomcat进行启动调试都很 ...
- 部署Eclipse中的Web项目到Tomcat服务器运行
用Eclipse开发Web项目时,可以通过Tomcat服务器运行Web项目,此时Web项目被部署在[WorkSpace]\.metadata\.plugins\org.eclipse.wst.serv ...
- Maven发布web项目到tomcat
在java开发中经常要引入很多第三方jar包:然而无论是java web开发还是其他java项目的开发经常会由于缺少依赖包引来一些不必要的异常.常常也是因为这样的原因导致许多简单的缺包和版本问题耗费大 ...
- Intellij IDEA创建的Web项目配置Tomcat并启动Maven项目
本篇博客讲解IDEA如何配置Tomcat. 大部分是直接上图哦. 点击如图所示的地方,进行添加Tomcat配置页面 弹出页面后,按照如图顺序找到,点击+号 tomcat Service -> L ...
- Maven实现项目构建直接部署Web项目到Tomcat
Maven实现项目构建直接部署Web项目到Tomcat配置如下: 1.Tomcat的用户及权限配置:在conf目录下,找到tomcat-users.xml,添加manager权限的用户. <ro ...
- web项目引用tomcat中的jar
web项目引用tomcat中的jar https://blog.csdn.net/zjsdrs/article/details/77868827 如下图所示
- 【原】Eclipse部署Maven web项目到tomcat服务器时,没有将lib下的jar复制过去的解决办法
我们在做web开发是,经常都要在eclipse中搭建web服务器,并将开发中的web项目部署到web服务器进行调试,在此,我选择的是tomcat服务器.之前部署web项目到tomcat进行启动调试都很 ...
- 关于idea中,web项目启动tomcat,访问资源报错404
背景: web项目启动tomcat,访问相应的资源,报错404,前提资源路径是没错的. 原因: 1.确定是不是web项目 不是的话: 配置web-inf的路径和webroot(web根目录)的路径 2 ...
随机推荐
- css兼容性的一些问题
1. 文字本身的大小不兼容.同样是font-size:14px的宋体文字,在不同浏览器下占的空间是不一样的,ie下实际占高16px,下留白3px,ff 下实际占高17px,上留白1px,下留白3px, ...
- Wannafly挑战赛25 C 期望操作数 数学
题目 题意:给你你一个数x和一个数q,x<=q,每一次可以等概率把x变成[x,q]中任意一个数,问变成q的步数的期望,输出对998244353取模,多组询问 题解:首先肯定的是,可以预处理,因为 ...
- Python关于super()函数的理解
看下面的例子: class A: def __init__(self, name): self.name = name def bb(self): print('没事就爱瞎BB') class B(A ...
- RabbitMQ(三) 集群配置
RabbitMQ--集群配置 之前不管是搞Redis.SQL.Mongo还是其他的东西,一律都没说过集群要怎么搞,电脑实在是带不动.说透彻点就是懒,懒得搭也懒得写,今日深刻意识到错误,做学问是不能懒的 ...
- 关于一些UI的插件(杂)
1.时间插件 //日期框 $('.date-picker').datepicker(); 2.checkbox 保存checkbox的值 // 组装选择的标签 var check = $(" ...
- guice整合struts2与jpa,guice的使用(九)
传统我们开发一般使用ssh,但是有些微服务应用的项目我们不需要这么臃肿的框架做开发,于是采用了guice+struts2+guice作为框架组合进行了开发. 先看我们项目引用的jar包: 使用的时候一 ...
- 登录linux,输入ls显示anaconda-ks.cfg cobbler.ks ....., 原因在于root@ ~ / 区别
今天登录linux测试机,想要创建目录,ls的时候,找不到之前的的目录,才发现是目录不对的问题. 首先,先要弄清楚 [root@330c353813ea ~] 和 [root@330c353813ea ...
- ReactiveX
http://reactivex.io The real power comes with the “reactive extensions” (hence “ReactiveX”) — operat ...
- CSS text-transform 属性 控制控制文本的大小写
值 描述 none 默认.定义带有小写字母和大写字母的标准的文本. capitalize 文本中的每个单词以大写字母开头. uppercase 定义仅有大写字母. lowercase 定义无大写字母, ...
- apiCloud中aui获取不到高度,pos.h为0,offsetHeight为0问题
apiCloud中aui获取不到高度,pos.h为0,offsetHeight为0问题 原HTML <div class="row aui-text-center"> ...