<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    捕風(fēng)之巢

    統(tǒng)計(jì)

    • 隨筆 - 7
    • 文章 - 82
    • 評(píng)論 - 14
    • 引用 - 0

    留言簿(3)

    java友情鏈接

    閱讀排行榜

    評(píng)論排行榜

    Ant+Tomcat自動(dòng)部署

    今天研究對(duì)象是Ant,用于對(duì)msms系統(tǒng)進(jìn)行Tomcat的自動(dòng)部署。

    遇到一個(gè)怪問題,百思不得其解:
    通過ant depoly可以把msms.war部署到tomcat上。當(dāng)然,要求這時(shí)候webapps下面沒有msms目錄。
    看tomcat的紀(jì)錄,加載msms.war正常,網(wǎng)頁(yè)也可以打開。

    通過ant undeploy,可以把msms卸載。Tomcat顯示:
    Undeploying context [/msms]
    正常卸載了。問題是,去看webapps目錄下面,居然有一個(gè)msms目錄的殘骸,里面保留的目錄是
    WEB-INF\lib
    有以下幾個(gè)文件殘留著:
    commons-digester.jar
    commons-validator.jar
    struts.jar

    這時(shí)候msms目錄也無法手工刪除,必須停掉tomcat后才能刪除。

    我裝的tomcat是5.5。不知道是否還有人遇到過這種情況,我反正是暈了。

    build.properties文件如下:
    tomcat.dir=C:/ApacheGroup/Tomcat5.5
    tomcat.webapps=C:/ApacheGroup/Tomcat5.5/webapps
    tomcat.manager.url=http://localhost:8080/manager
    tomcat.manager.username=admin
    tomcat.manager.password=xxxxxxxx

    build.xml文件如下:
    <?xml version="1.0"?>
    <project name="msms" default="compile" basedir=".">
    ??? <!-- Ant Tomcat Task Definition -->
    ??? <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask">
    ??? ??? <classpath>
    ??? ??? ??? <path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
    ??? ??? </classpath>
    ??? </taskdef>

    ??? <taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask">
    ??? ??? <classpath>
    ??? ??? ??? <path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
    ??? ??? </classpath>
    ??? </taskdef>

    ??? <taskdef name="install" classname="org.apache.catalina.ant.InstallTask">
    ??? ??? <classpath>
    ??? ??? ??? <path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
    ??? ??? </classpath>
    ??? </taskdef>

    ??? <taskdef name="reload" classname="org.apache.catalina.ant.ReloadTask">
    ??? ??? <classpath>
    ??? ??? ??? <path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
    ??? ??? </classpath>
    ??? </taskdef>

    ??? <taskdef name="list" classname="org.apache.catalina.ant.ListTask">
    ??? ??? <classpath>
    ??? ??? ??? <path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
    ??? ??? </classpath>
    ??? </taskdef>

    ??? <taskdef name="start" classname="org.apache.catalina.ant.StartTask">
    ??? ??? <classpath>
    ??? ??? ??? <path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
    ??? ??? </classpath>
    ??? </taskdef>

    ??? <taskdef name="stop" classname="org.apache.catalina.ant.StopTask">
    ??? ??? <classpath>
    ??? ??? ??? <path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
    ??? ??? </classpath>
    ??? </taskdef>

    ??? <property name="build" value="build" />
    ??? <property name="dist" value="dist" />
    ??? <property name="src" value="src/java" />
    ??? <property name="test" value="src/test" />
    ??? <property name="war-config" value="src/config" />
    ??? <property name="report" value="report" />
    ??? <property name="lib" value="lib" />
    ??? <property name="web" value="web" />
    ??? <property name="meta" value="meta" />
    ??? <property name="context-path" value="${ant.project.name}" />
    ??? <property file="build.properties" />

    ??? <path id="build.classpath">
    ??? ??? <fileset file="${lib}/*.jar" />
    ??? ??? <fileset dir="${tomcat.dir}/common/lib">
    ??? ??? ??? <include name="*.jar" />
    ??? ??? </fileset>
    ??? ??? <fileset dir="${tomcat.dir}/common/endorsed">
    ??? ??? ??? <include name="*.jar" />
    ??? ??? </fileset>
    ??? ??? <pathelement path="${build}" />
    ??? </path>

    ??? <!-- Hibernate Tool Task Definition -->
    ??? <taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="build.classpath" />
    ???
    ??? <target name="clean">
    ??? ??? <echo message="Cleaning up the build and dist directories" />
    ??? ??? <delete dir="${build}" />
    ??? ??? <mkdir dir="${build}" />
    ??? ??? <delete dir="${dist}" />
    ??? ??? <mkdir dir="${dist}" />
    ??? </target>

    ??? <target name="copy-resources">
    ??? ??? <copy todir="${build}">
    ??? ??? ??? <fileset dir="${src}">
    ??? ??? ??? ??? <exclude name="**/*.java" />
    ??? ??? ??? ??? <exclude name="**/*.hbm.xml" />
    ??? ??? ??? </fileset>
    ??? ??? </copy>
    ??? </target>

    ??? <target name="compile" depends="copy-resources">
    ??? ??? <javac destdir="${build}" srcdir="${src}:${test}">
    ??? ??? ??? <classpath refid="build.classpath" />
    ??? ??? </javac>
    ??? </target>

    ??? <target name="initdb" depends="compile">
    ??? ??? <hibernatetool destdir="${build}">
    ??? ??? ??? <classpath>
    ??? ??? ??? ??? <path location="${build}" />
    ??? ??? ??? </classpath>
    ??? ??? ??? <annotationconfiguration configurationfile="src/java/hibernate.cfg.xml" />

    ??? ??? ??? <hbm2ddl create="true" />
    ??? ??? </hibernatetool>
    ??? </target>

    ??? <target name="run" depends="compile">
    ??? ??? <java fork="true" classname="cn.ac.rcpa.msms.tools.ProjectManager" classpathref="build.classpath">
    ??? ??? ??? <classpath path="${build}" />
    ??? ??? ??? <arg value="${action}" />
    ??? ??? ??? <arg value="${project}" />
    ??? ??? ??? <arg value="${description}" />
    ??? ??? </java>
    ??? </target>

    ??? <target name="test" depends="compile" description="run junit test">
    ??? ??? <delete dir="${report}" />
    ??? ??? <mkdir dir="${report}" />
    ??? ??? <junit dir="." fork="true" printsummary="on" haltonfailure="false" failureproperty="tests.failed" showoutput="true">
    ??? ??? ??? <classpath refid="build.classpath" />
    ??? ??? ??? <formatter type="brief" />
    ??? ??? ??? <batchtest todir="${report}">
    ??? ??? ??? ??? <fileset dir="${build}">
    ??? ??? ??? ??? ??? <include name="**/*Test.*" />
    ??? ??? ??? ??? ??? <include name="**/Test*.*" />
    ??? ??? ??? ??? </fileset>
    ??? ??? ??? </batchtest>
    ??? ??? </junit>
    ??? ??? <fail if="tests.failed">
    ????? ***********************************************************
    ????? **** One or more tests failed! Check the output ... ****
    ????? ***********************************************************
    ??? </fail>
    ??? </target>

    ??? <target name="create-war" depends="clean, compile" description="build release war">
    ??? ??? <echo message="creation the WAR file...${context-path}.war" />
    ??? ??? <war destfile="${dist}/${context-path}.war" webxml="${meta}/web.xml">
    ??? ??? ??? <classes dir="${build}">
    ??? ??? ??? ??? <exclude name="**/*Test.*" />
    ??? ??? ??? ??? <exclude name="**/Test*.*" />
    ??? ??? ??? ??? <exclude name="hibernate.cfg.xml" />
    ??? ??? ??? </classes>
    ??? ??? ??? <lib dir="${lib}" />
    ??? ??? ??? <fileset dir="${web}" />
    ??? ??? ??? <zipfileset dir="${war-config}" prefix="WEB-INF/classes" />
    ??? ??? </war>
    ??? ??? <!--??? ??? <scp file="${dist}/${context-path}.war" todir="root:${password}@172.16.1.20:/usr/local/tomcat/webapps" trust="true" /> -->
    ??? </target>

    ??? <target name="deploy" description="Install application in Tomcat">
    ??? ??? <deploy url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="/${context-path}" localWar="file:${dist}/${context-path}.war" />
    ??? </target>

    ??? <target name="undeploy" description="Remove application in Tomcat" if="already.deployed">
    ??? ??? <undeploy url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="/${context-path}" />
    ??? </target>

    ??? <target name="reload" description="Reload application in Tomcat">
    ??? ??? <reload url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="/${context-path}" />
    ??? </target>

    ??? <target name="start" description="Start Tomcat application">
    ??? ??? <start url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="/${context-path}" />
    ??? </target>

    ??? <target name="stop" description="Stop Tomcat application">
    ??? ??? <stop url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="/${context-path}" />
    ??? </target>

    ??? <target name="list" description="List Tomcat applications">
    ??? ??? <list url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" />
    ??? </target>

    ??? <target name="deploy-application" description="Compile the web application...">
    ??? ??? <echo message="Undeploying the application only if it's deployed..." />
    ??? ??? <available file="${tomcat.webapps}/${context-path}.war" property="already.deployed" />
    ??? ??? <antcall target="undeploy" />
    ??? ??? <antcall target="create-war" />
    ??? ??? <antcall target="deploy" />
    ??? </target>
    </project>


    只有Windows上才會(huì)有的問題,
    創(chuàng)建META-INF目錄, 在目錄里新建context.xml,加入如下內(nèi)容

    <?xml version="1.0" encoding="UTF-8"?>
    <Context reloadable="true" antiResourceLocking="true">
    </Context>

    昨天的錯(cuò)誤至今無法修正,即使重裝了Tomcat也不行。

    不過,deploy到兩臺(tái)linux服務(wù)器上倒都成功了。
    ??? <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask">
    ??? ??? <classpath>
    ??? ??? ??? <path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
    ??? ??? </classpath>
    ??? </taskdef>

    ??? <taskdef name="list" classname="org.apache.catalina.ant.ListTask">
    ??? ??? <classpath>
    ??? ??? ??? <path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
    ??? ??? </classpath>
    ??? </taskdef>

    ??? <target name="deploy-web" description="Install application in Local Tomcat">
    ??? ??? <echo message="deploying to web ..." />
    ??? ??? <deploy url="http://172.16.1.20:8080/manager" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="/${context-path}" war="file:${dist}/${context-path}.war" update="true" />
    ??? </target>

    ??? <target name="list-web">
    ??? ??? <echo message="list web tomcat ..." />
    ??? ??? <list url="http://172.16.1.20:8080/manager" username="${tomcat.manager.username}" password="${tomcat.manager.password}" />
    ??? </target>


    這里跟昨天的代碼有一點(diǎn)不一樣:
    1、localWar改成了war。
    原來更新遠(yuǎn)程服務(wù)器的時(shí)候,總是顯示更新成功,但是到webapps目錄下總是沒有相應(yīng)的war文件,通過調(diào)用
    ant list-web
    發(fā)現(xiàn),有一個(gè)context-path是dist/msms,而且是stop狀態(tài)。哦,原來localWar的意思不是指開發(fā)的機(jī)器的local path,而是指把這個(gè)war被寫到服務(wù)器的什么地方。改成war就正常了。

    2、不需要判斷是否已經(jīng)deploy進(jìn)而調(diào)用undeploy了,直接通過update="true"更新就可以了。

    posted on 2006-11-23 08:59 捕風(fēng) 閱讀(17785) 評(píng)論(1)  編輯  收藏 所屬分類: java高級(jí)

    評(píng)論

    # re: Ant+Tomcat自動(dòng)部署 2007-10-24 16:03 paoding

    徹底解決Ant在Tomcat進(jìn)行卸載部署undeploy時(shí)不能刪除jar文件的問題

    首先有一種解決辦法,就是在應(yīng)用下的META-INF下新建context.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <Context reloadable="true" antiResourceLocking="true" antiJARLocking="true">
    </Context>

    這種方法在重復(fù)進(jìn)行多次deploy、undeploy時(shí)的確解決了該問題。但是如果在deploy和undeploy之間執(zhí)行如下的webtest任務(wù),也就是在undeploy前訪問該應(yīng)用,那么Tomcat就會(huì)加載jar文件,再執(zhí)行undeploy時(shí)還是不能刪除jar文件,此時(shí)似乎Tomcat植入jar根深蒂固了!
    <target name="webtest_login">
    <echo message="WebTest測(cè)試"/>
    <exec executable="cmd">
    <arg line="/c webtest.bat -f tools/Java/webtest/login.xml -Dwebtest.home=${tools.webtest}"/>
    <arg line="-Dwebtest.home=${tools.webtest}"/>
    <arg line="-Dhost=${manager.ip}"/>
    <arg line="-Dport=${manager.port}"/>
    <arg line="-Dbasepath=${deploy.name}"/>
    <arg line="-Dresultpath=${report.webtestReport.part}"/>
    <arg line="-Dresultfile=${report.webtestReport.xml.part}"/>
    </exec>
    <xslt in="${report.webtestReport.xml}" out="${report.webtestReport.html}" style="${tools.webtest.reportstyle}" />
    </target>

    有一個(gè)辦法可以徹底解決該問題,就是使用xml部署文件來部署應(yīng)用,不適用war發(fā)布的方式:
    <target name="deploy">
    <echo message="安裝Web應(yīng)用"/>
    <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask" classpathref="classpath.catalina"/>
    <deploy url="${manager.url}" username="${manager.username}" password="${manager.password}" path="/${deploy.name}" config="D:\AutoBuilder\build\student\web\context.xml"/>
    </target>

    context.xml描述的項(xiàng)目目錄位于Tomcat外的目錄:
    <Context path="/student" docBase="D:/AutoBuilder/build/student/web" debug="0"/>

    這樣應(yīng)用程序是指向外界的,不位于Tomcat目錄中,再執(zhí)行undeploy時(shí)就沒有這個(gè)問題了。而且使用war進(jìn)行deploy時(shí)后臺(tái)的錯(cuò)誤也不會(huì)再出現(xiàn)了:
    java.io.FileNotFoundException: webapps\student (The system cannot find the path specified)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:106)
    at org.apache.catalina.startup.ExpandWar.copyInternal(ExpandWar.java:226)

    BTW,deploy時(shí)會(huì)在C:\Tomcat 5.5\conf\Catalina\localhost下拷貝生成context.xml,undeploy時(shí)會(huì)刪除該文件。  回復(fù)  更多評(píng)論   

    主站蜘蛛池模板: 视频一区在线免费观看| 一本岛v免费不卡一二三区| 丁香花免费完整高清观看| 亚洲欧洲无码一区二区三区| 成熟女人特级毛片www免费| 亚洲AV无码国产剧情| 亚洲国产一级在线观看 | 亚洲一区精品伊人久久伊人| 亚洲aⅴ无码专区在线观看春色| 国产zzjjzzjj视频全免费| 无码日韩人妻AV一区免费l | aa级毛片毛片免费观看久| 亚洲精品无码mv在线观看网站| 免费精品99久久国产综合精品| 亚洲国产av美女网站| gogo全球高清大胆亚洲| 在线涩涩免费观看国产精品| 亚洲久热无码av中文字幕| 亚洲人午夜射精精品日韩| 水蜜桃视频在线观看免费播放高清| 亚洲白色白色在线播放| 中文字幕免费在线看线人 | 成年免费大片黄在线观看com| 亚洲线精品一区二区三区 | 久久久亚洲精华液精华液精华液| 精品国产亚洲男女在线线电影| 美女内射无套日韩免费播放| 蜜臀亚洲AV无码精品国产午夜.| 亚洲人成图片小说网站| 成年女人免费视频播放体验区| 久久成人免费播放网站| 亚洲av无码成人影院一区| 亚洲综合免费视频| 国产一级淫片免费播放电影| 久久精品视频免费播放| 羞羞视频免费观看| 噜噜噜亚洲色成人网站∨| 亚洲 另类 无码 在线| 亚洲综合免费视频| 久久亚洲精品无码网站| 日韩精品一区二区亚洲AV观看|