DreamTiger的夢幻樂園

          隨便寫寫,自得其樂,生活就是這樣

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            29 Posts :: 0 Stories :: 13 Comments :: 0 Trackbacks
          今天研究對象是Ant,用于對msms系統進行Tomcat的自動部署。

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

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

          這時候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>


          posted on 2005-12-08 18:13 夢幻樂園 閱讀(1416) 評論(3)  編輯  收藏 所屬分類: Java

          Feedback

          # re: Ant+Tomcat自動部署的怪問題 2006-02-26 13:32 Alex
          沒有刪除調一般是因為文件被一個進程使用,你可以先停掉tomcat試下  回復  更多評論
            

          # re: Ant+Tomcat自動部署的怪問題 2006-02-26 17:48 夢幻樂園
          停掉tomcat就無法在線部署了。后來也只能是用怪招完成的:
          http://www.aygfsteel.com/DreamTiger/archive/2005/12/14/23944.html  回復  更多評論
            

          # re: Ant+Tomcat自動部署的怪問題 2006-03-09 17:34 tristone
          只有Windows上才會有的問題,
          創建META-INF目錄, 在目錄里新建context.xml,加入如下內容

          <?xml version="1.0" encoding="UTF-8"?>
          <Context reloadable="true" antiResourceLocking="true">
          </Context>
            回復  更多評論
            

          主站蜘蛛池模板: 施秉县| 新余市| 八宿县| 邹城市| 邓州市| 昭苏县| 永丰县| 巴南区| 佛教| 兴义市| 舟山市| 鲁甸县| 屯门区| 安丘市| 开平市| 盐亭县| 从江县| 鲜城| 松原市| 寻甸| 柳林县| 泗阳县| 鸡东县| 泰安市| 浑源县| 涿州市| 韩城市| 丹凤县| 曲阜市| 五台县| 镇宁| 礼泉县| 桦川县| 海丰县| 嫩江县| 水城县| 克山县| 聊城市| 同德县| 慈溪市| 鄢陵县|