2009-12-14 5 views
4

Я использую Tomcat 6, Apache Ant 1.7.1 и JDK 1.6 на OS X Snow Leopard ...Проблема с Undeploy задачи в Tomcat 6

создал следующий сценарий сборки и вспомогательные файлы свойств:

(1) build.xml

<?xml version="1.0"?> 
<project name="${project.name}" default="deploy" basedir="."> 
    <property file="build.properties"/> 
    <property file="admin.properties"/> 

    <taskdef file="tomcatTasks.properties"> 
     <classpath> 
     <pathelement path="${tomcat.home}/lib/catalina-ant.jar"/> 
     </classpath> 
    </taskdef> 

    <target name="prepare"> 
     <mkdir dir="${webapp.build.dir}" /> 
     <mkdir dir="${webapp.build.dir}/WEB-INF" /> 
     <mkdir dir="${webapp.build.dir}/WEB-INF/lib" /> 
     <mkdir dir="${webapp.build.dir}/WEB-INF/classes" /> 
    </target> 

    <target name="static" depends="prepare"> 
     <!-- Copy web files --> 
     <copy todir="${webapp.build.dir}/"> 
      <fileset dir="web" /> 
     </copy> 
     <!-- Copy webapp configuration files --> 
     <copy todir="${webapp.build.dir}/WEB-INF/"> 
      <fileset dir="etc" /> 
     </copy> 
     <!-- Copy properties files --> 
     <copy todir="${webapp.build.dir}/WEB-INF/classes"> 
     <fileset dir="props" /> 
     </copy> 
     <!-- Copy jar files --> 
     <copy todir="${webapp.build.dir}/WEB-INF/lib/"> 
      <fileset dir="lib" /> 
     </copy> 
    </target> 

    <target name="compile" depends="static"> 
     <javac srcdir="src" 
      destdir="${webapp.build.dir}/WEB-INF/classes/" 
      deprecation="off" debug="on" optimize="off"> 
      <classpath> 
       <!-- Include all JAR files in my local library --> 
       <fileset dir="lib"> 
        <include name="*.jar"/> 
       </fileset> 
       <!-- Include all common libraries in Tomcat --> 
       <fileset dir="${tomcat.home}/lib"> 
        <include name="*.jar"/> 
       </fileset> 
      </classpath> 
     </javac> 
    </target> 

    <target name="deploy" depends="compile"> 
     <jar jarfile="${build.dir}/${webapp.name}.war" basedir="${webapp.build.dir}" /> 
     <!-- Copy the newly built WAR file into the deployment directory --> 
     <copy file="${build.dir}/${webapp.name}.war" todir="${tomcat.deployment.dir}" /> 
    </target> 

    <target name="clean" description="Clears all generated files, including build directories, distributables, and documentation."> 
     <delete dir="${build.dir}"/> 
    </target> 

    <target name="package"> 
     <jar jarfile="${build.dir}/${webapp.name}.war" basedir="${webapp.build.dir}" /> 
    </target> 

    <target name="install" description="Install application in Tomcat" depends="package"> 
     <deploy url="${tomcat.manager.url}" 
      username="${tomcat.username}" 
      password="${tomcat.password}" 
      path="/${webapp.name}" 
      war="file:${tomcat.deployment.dir}/${webapp.name}.war"/> 
    </target> 

    <target name="undeploy" depends="clean" description="Remove application in Tomcat"> 
     <undeploy url="${tomcat.manager.url}" 
       username="${tomcat.username}" 
       password="${tomcat.password}" 
       path="/${webapp.name}"/> 
    </target> 
</project> 

(2) admin.properties:

tomcat.server=localhost 
tomcat.manager.url=http://${tomcat.server}:8080/manager 
tomcat.username=admin 
tomcat.password=admin 

(3) build.properties:

project.name=myproject 
build.dir=./build 

# Web app properties for the project 
webapp.name=myproject 
webapp.build.dir=${build.dir}/${webapp.name} 
webapp.virtual.host=localhost 
webapp.meta.dir=${webapp.build.dir}/META-INF 

# Tomcat properties 
tomcat.home=/Users/myuser/DevTools/Java/tomcat/apache-tomcat-6.0.20 
tomcat.deployment.dir=${tomcat.home}/webapps 

(4) tomcatTasks.properties:

# Tomcat Task Properties 
deploy=org.apache.catalina.ant.DeployTask 
install=org.apache.catalina.ant.InstallTask 
list=org.apache.catalina.ant.ListTask 
reload=org.apache.catalina.ant.ReloadTask 
remove=org.apache.catalina.ant.RemoveTask 
resources=org.apache.catalina.ant.ResourcesTask 
roles=org.apache.catalina.ant.RolesTask 
start=org.apache.catalina.ant.StartTask 
stop=org.apache.catalina.ant.StopTask 
undeploy=org.apache.catalina.ant.UndeployTask 

(5)-users.xml кот:

Когда я бегу цель Deploy, все работает (он помещает myproject.war) под $ CATALINA_HOME/WebApps ...

Однако, когда я бегу цель Undeploy, я получаю следующее сообщение об ошибке:

Проблема:

Buildfile: /Users/myuser/work/myproject/build.xml 
Trying to override old definition of datatype resources 
clean: 
    [delete] Deleting directory /Users/myuser/work/myproject/build 
undeploy: 

BUILD FAILED 
/Users/myuser/work/myproject/build.xml:83: java.io.IOException: Server returned HTTP response code: 403 for URL: http://localhost:8080/manager/undeploy?path=/myproject 

Total time: 170 milliseconds 

действительно бы признателен, если кто-то может сказать мне, что я делаю неправильно ...

Спасибо, что нашли время, чтобы прочитать это ...

Happy программирования.

ответ

6

Это неудачно, потому что приложение менеджера Tomcat возвращает код статуса HTTP 403, что означает Forbidden. Таким образом, доступ запрещен.

Когда я разобрался с вашим вопросом, я нашел ваш post on JavaRanch, который включает в себя файл tomcat-users.xml (сюда не включен). Я вижу, что нет пользователя с ролью manager, которая требуется для выполнения задачи undeploy. Попробуйте добавить роль manager к вашему пользователю admin.

<role rolename="manager"/> 
<user username="admin" password="admin" roles="admin,manager"/> 

От Tomcat docs:

Чтобы разрешить доступ к веб-приложений, то вы должны либо создать новое имя пользователя/комбинацию пароля и связать менеджер имя роли с ним, или добавить роль менеджера к некоторой существующей комбинации имени пользователя/пароля.

Если вы задаетесь вопросом, почему ваша deploy задача, кажется, работает, когда ваша undeploy задача не делает, это потому, что deploy задача не по всей видимости, с помощью приложения менеджер для его развертывания. Вместо этого он просто копирует war в целевой каталог.

+1

Я думаю, что вы имели в виду: <имя пользователя = "admin" password = "admin" role = "admin, manager" /> –

+0

Отредактировано, чтобы включить исправление. – Chucky

2

Попробуйте добавить роль manager-script для пользователя tomcat, которого вы используете.

например.

<role rolename="manager-script"/> 
<user username="admin" password="admin" roles="manager-script"/> 
0

Полная запись пользователя в пользовательской конфигурации tomcat 7.0.

<role rolename="tomcat"/> 
<role rolename="manager"/> 
<role rolename="manager-script"/> 
<role rolename="manager-gui"/> 
<role rolename="standard"/> 
    <user username="admin" password="admin" roles="tomcat,manager,standard,manager-script,manager-gui"/> 
</tomcat-users> 

Большинство людей пропустили первую роль. остановить и перезагрузить сервер, и вы будете хороши.

+0

Документы Tomcat [рекомендуют] (http://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html) «Пользователям с ролью менеджера-gui не следует предоставлять менеджер-скрипт или менеджер-jmx роли «. –