ANT发布SVN WEB项目到TOMCAT以及利用post-commit自动提交编译更新

开发人员在本地提交更新到SVN服务器后,往往需要测试人员重新测试。为了将更新内容即时反映到测试服务器,可以利用post-commit脚本将SVN更新同步到测试服务器中。

(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指明的是通过浏览器访问该项目网页时在服务器IP及访问PORT后的路径。例如通过本地服务器访问该网页时的访问URL应为http://localhost:8080/prjname。如果指明path=””,则表明访问http://localhost:8080/时自动引导到docBase指定的项目。

docBase指明WEB项目的相对路径或绝对路径。例如上述例示中指明相对路径为HOST标签所指定的appBase下prjname/WebContent文件夹。需要注意的是文件夹的名字可以为任何有效目录名,但tomcat的WEB项目必须遵照特定的目录结构存放。

- web_home

- index.html
- webpages ...
+ webpage_folder
++ webpages ...
+ javascript_folder
++ ....js

+ META-INF
++ MAINFEST.INF

+ WEB-INF
++ classes
++ lib
----  web.xml

静态页面(*.html,*.js and*.jsp等)文件或文件夹放在WEB根目录(prjname/WebContent)下,编译后的类文件放在prjname/WebContent/WEB-INF/classes文件夹下。项目所用的库文件和配置文件web.xml也放在prjname/WebContent/WEB-INF/classes文件夹下。TOMCAT按照上述文件结构解析WEB项目。事实上,将WEB项目打包成WAR文件发布时,也必须安装上述结构组织源文件,而TOMCAT解压WAR文件后形成的WEB项目,和这里手动发布的WEB项目应是一样的。

(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相关服务器后,即可使用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操作之后,SVN服务器会自动执行post-commit钩子程序。先更新TOMCAT中的工作副本,然后编译需要编译的文件。这样以来,*.html,*.js或*.jsp等文件的更新操作,即可在刷新相应的WEB页面之后即时反映,而*.java文件的更新则可能需要重新TOMCAT服务器后才能反映到业务逻辑中。

时间: 2024-08-26 23:46:04

ANT发布SVN WEB项目到TOMCAT以及利用post-commit自动提交编译更新的相关文章

Maven发布web项目到tomcat

在java开发中经常要引入很多第三方jar包:然而无论是java web开发还是其他java项目的开发经常会由于缺少依赖包引来一些不必要的异常.常常也是因为这样的原因导致许多简单的缺包和版本问题耗费大量的精力.然而,开源世界并没有让java开发人员在这方面耗费过多的精力. Apache提供了Maven工具,对项目进行自动化的构建和发布.只需要在Maven的pom.xml文件中加入相应的配置项,剩余的工作交给maven就可以了.然而去喝杯茶做个安安静静的美男子.然而除了Maven外还有Gradle

在eclipse中发布maven的多模块web项目到tomcat上及单步debug模块jar

1.在eclipse中发布maven的多模块web项目到tomcat eclipse和maven及tomcat的部署略去,还有maven的基础知识和使用在此处略去. 按照如下的步骤操作: 将lib和maven模块生成的jar加入到lib下. 注意:到这步可能有WebContent并且没有src/main/webapp,要做如下操作 1.选中 WebContent,remove掉它 2.新建一个,Source文件夹为src/main/webapp,deploy path为 / 至此,后面可以用正常

【转载】Eclipse中用Tomcat发布的Web项目,更改其部署路径

转载自 http://blog.163.com/java_zf/blog/static/19926038420129240314546/ 在Eclipse中配置完Tomcat后,发布到的路径是: D:\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps 这个路径太深了,所以我想使用Tomcat的默认路径,如何在Eclipse中进行修改呢? 1.找到Server面板,右击当前的那个Tomc

使用ANT实现对web项目的自动更新 编译 打包

在服务器上无法使用eclipse来打包.需采用ant方式 附件中是ant所需要的svn插件 并在ant/lib下面删除:svnjavahl.jar,javasvn.jar http://panyongzheng.iteye.com/blog/1271184 <?xml version="1.0" encoding="UTF-8"?> <project name="cim" default="deploy" b

MyEclipse中添加web项目到tomcat

如果导入不是在MyEclipse下建立的web项目,想添加到tomcat中时,会显示"No projects are available for deployment to this server...............".其实可以简单地修改两个配置文件: .project文件:在natures节点中添加webnature <natures> <nature>com.genuitec.eclipse.j2eedt.core.webnature</na

在eclipse中公布maven的多模块web项目到tomcat上及单步debug模块jar

1.在eclipse中公布maven的多模块web项目到tomcat eclipse和maven及tomcat的部署略去,还有maven的基础知识和使用在此处略去. 依照例如以下的步骤操作: 将lib和maven模块生成的jar增加到lib下. 注意:到这步可能有WebContent而且没有src/main/webapp,要做例如以下操作 1.选中 WebContent,remove掉它 2.新建一个,Source目录为src/main/webapp,deploy path为 / 至此,后面能够

我做的一个web项目从tomcat迁移到weblogic遇到的问题

第1个问题: 异常描述:VALIDATION PROBLEMS WERE FOUND problem: cvc-enumeration-valid: string value '3.0' is not a valid enumeration value for web-app-versionType in namespace http://java.sun.com/xml/ns/javaee:<null> 因为创建项目的时候用的是JAVAEE6,所以生成web.xml文件的时候是这样的: [j

Eclipse部署Maven web项目到tomcat服务器时,没有将lib下的jar复制过去的解决办法

我们在做web开发是,经常都要在eclipse中搭建web服务器,并将开发中的web项目部署到web服务器进行调试,在此,我选择的是tomcat服务器.之前部署web项目到tomcat进行启动调试都很正常,今天突然出现无法启动情况,启动过程报如下错误: java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener at org.apache.catalina.loader.Webap

ant发布web项目,tomcat管理界面发布war项目

今天用apache-ant-1.9.4 版本对 java web项目-adjustSolr 打包为war,并发布到tomcat中(一定要注意开发用的jdk版本和tomcat中的jdk版本一致,否则unsupport version51 错误) 贴build.xml文件的代码 <?xml version="1.0" encoding="UTF-8"?> <project name ="adjustSolr" default =&q