неиспользуемая цель не работает должным образом - PullRequest
0 голосов
/ 07 мая 2011

Я использую tomcat6 и ant1.7.1.Испытывая главу о кактусах в книге о программировании java Extreme от oreilly, я пытался развернуть, отменить развертывание веб-приложения с помощью менеджера tomcat с помощью ant.

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

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

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

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

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

спасибо

mark

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

....
            <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 Ответ

0 голосов
/ 07 мая 2011

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

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

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