цель отмены развертывания не работает должным образом

#tomcat #deployment #ant

#tomcat #развертывание #ant

Вопрос:

Я использую tomcat6 и ant1.7.1. Пробуя главу cactus в книге oreilly’s java extreme programming, я пытался развернуть, отменить развертывание веб-приложения через tomcat manager с использованием ant.

Я написал цели развертывания и отмены развертывания, используя taskdefs, как показано ниже.. Когда я запускаю цель развертывания, код компилируется, преобразуется в файл war и создается пустой каталог с именем xptest (имя контекста) в C:apache-tomcat-6.0.29workCatalinalocalhost . Ant выводит это сообщение

 [deploy] OK - Deployed application at context path /xptest
  

Однако, когда цель отмены развертывания запущена, я получаю только это сообщение,

 Buildfile: build.xml
init:
undeploy:
BUILD SUCCESSFUL
Total time: 0 seconds
  

Когда я проверяю диспетчер приложений в браузере, я вижу, что приложение xptest все еще развернуто.Только когда я нажимаю кнопку отмены развертывания, она удаляется.
Почему это так? если кто-нибудь может помочь мне разобраться в этом, пожалуйста, сделайте

Спасибо

отметить

Соответствующая часть файла сборки приведена ниже

 ....
            <property environment="env."/>
    <property name="dir.build" value="build"/>
    <property name="dir.src" value="src"/>
    <property name="dir.resources" value="resources"/>
    <property name="dir.lib" value="lib"/>

    <property name="url.manager" value="http://localhost:8080/manager"/>
    <property name="username.manager" value="me"/>
    <property name="password.manager" value="mypasswd"/>
    <property name="host" value="http://localhost"/>
    <property name="port" value="8080"/>
    <property name="webapp.context.name" value="xptest"/>
            ....

<target name="init" description="sets properties if conditions are true">
        <condition property="is.tomcat.started">
            <http url="${host}:${port}"/>
        </condition>        
        <condition property="is.webapp.deployed">
            <and>
                <isset property="is.tomcat.started"/>
                <http url="${host}:${port}/${webapp.context.name}"/>
            </and>
        </condition>
</target>

<target name="prepare" description="generate the cactus.properties file each time Cactus tests are run">
        <mkdir dir="${dir.build}"/>         
        <propertyfile file="${dir.build}/cactus.properties">
            <entry key="cactus.contextURL" value="${host}:${port}/

${webapp.context.name}"/>       
            <entry key="cactus.servletRedirectorName" value="${servlet.redirector}"/>
            <entry key="jspRedirectorName" value="${jsp.redirector}"/>
            <entry key="cactus.filterRedirectorName" value="${filter.redirector}"/>
        </propertyfile>
</target>

<target name="compile" depends="prepare" description="Compile all source code">
        <javac srcdir="${dir.src}" destdir="${dir.build}" verbose="yes">
            <classpath refid="classpath.project"/>
        </javac>
</target>

<target name="war" depends="compile">
        <war destfile="${dir.build}/${webapp.context.name}.war" 

webxml="${dir.resources}/web.xml">
            <classes dir="${dir.build}">
                <include name="com/oreilly/javaxp/cactus/**/*.class"/>
            </classes>          
             <lib dir="${env.CACTUS_HOME}/lib">
                <include name="aspectjrt-1.5.3.jar"/>
                <include name="cactus.core.framework.uberjar.javaEE.14-

1.8.1.jar"/>
                <include name="commons-logging-1.1.jar"/>
                <include name="httpunit-1.6.jar"/>
                <include name="junit-3.8.2.jar"/>
             </lib>         
            <fileset dir="${dir.resources}">
                  <include name="*.jsp"/>
                  <include name="*.html"/>
            </fileset>
        </war>
</target>

<target name="start.tomcat">
        <taskdef name="starttomcat"    

classname="com.oreilly.javaxp.tomcat.tasks.StartTomcatTask">
            <classpath>
                  <path location="${dir.lib}/tomcat-tasks.jar"/>
            </classpath>
        </taskdef>      
        <starttomcat testURL="${host}:${port}" catalinaHome="${env.CATALINA_HOME}"/>
</target>

<target name="undeploy" depends="init" if="is.webapp.deployed" description="Remove web application">
        <taskdef name="undeploy"  classname="org.apache.catalina.ant.UndeployTask">
            <classpath>
                 <path location="${env.CATALINA_HOME}/lib/catalina-ant.jar"/>
            </classpath>
        </taskdef>
        <undeploy url="${url.manager}" username="${username.manager}" 

password="${password.manager}"
                path="/${webapp.context.name}"/>
</target>

 <target name="deploy" depends="war,start.tomcat,undeploy" description="Install web application">   
        <taskdef name="deploy"    classname="org.apache.catalina.ant.DeployTask">
            <classpath>
                 <path location="${env.CATALINA_HOME}/lib/catalina-ant.jar"/>
            </classpath>
        </taskdef>
        <deploy url="${url.manager}" username="${username.manager}" 

password="${password.manager}"
                path="/${webapp.context.name}" war="file:${dir.build}/${webapp.context.name}.war"/>
</target>
  

Ответ №1:

Я не совсем уверен, что может быть не так, но, похоже, это может быть вашим условием для проверки, уже ли приложение развернуто. Вы могли бы попробовать повторить то, что для этого устанавливается при попытке отменить развертывание.

Могу ли я также предложить метод, описанный на странице документации Tomcat для получения статуса контекста? У меня это сработало хорошо. Если цель с именем tomcat.context.status выполняет то, что там описано, вы могли бы затем изменить свою undeploy цель на:

 <target name="undeploy" depends="tomcat.context.status" unless="context.notInstalled" description="Remove web application">