2009-12-14 4 views
4

J'utilise Tomcat 6, Apache Ant 1.7.1 et JDK 1.6 sur OS X Snow Leopard ...problème avec Undeploy Tâche dans Tomcat 6

Créé le script de compilation suivante ainsi que les dossiers de propriété:

(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) tomcat-users.xml:

Quand je lance la cible de déploiement, tout fonctionne (il met myproject.war) au-dessous $ CATALINA_HOME/webapps ...

Cependant, quand je lance la cible undeploy, je reçois le message d'erreur suivant:

problème:

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 

apprécierais vraiment si quelqu'un pouvait me dire ce que je fais mal ...

Merci de prendre le temps de lire ce ...

Bonne programmation.

Répondre

6

Il échoue car l'application Tomcat Manager renvoie un code d'état HTTP 403 qui signifie Interdit. Donc, l'accès est refusé. Lorsque j'ai recherché votre question, j'ai trouvé votre post on JavaRanch qui comprend votre fichier tomcat-users.xml (non inclus ici). Je vois qu'il n'y a aucun utilisateur avec le rôle manager qui est requis pour exécuter la tâche undeploy. Essayez d'ajouter le rôle manager à votre utilisateur admin.

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

De l'Tomcat docs:

Pour permettre l'accès à l'application Web Manager, vous devez créer une nouvelle combinaison nom d'utilisateur/mot de passe et associer le gestionnaire de nom de rôle avec elle, ou ajouter le rôle de gestionnaire à une combinaison nom d'utilisateur/mot de passe existant.

Si vous vous demandez pourquoi votre tâche deploy semble fonctionner lorsque votre tâche ne undeploy pas, il est parce que la tâche deploy ne semble pas utiliser l'application de gestionnaire pour son déploiement. Au lieu de cela, il copie simplement le war dans le répertoire cible.

+1

Je pense que vous vouliez dire:

+0

L'a édité pour inclure votre correctif. – Chucky

2

Veuillez essayer d'ajouter le rôle manager-script pour l'utilisateur tomcat que vous utilisez.

par exemple.

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

L'entrée complète de l'utilisateur dans la configuration utilisateur de 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> 

La plupart du temps, les gens manquent le premier rôle. arrêtez et redémarrez le serveur et vous seriez bon.

+0

Les documents Tomcat [recommander] (http://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html) "Les utilisateurs avec le rôle manager-gui ne devraient pas avoir le manager-script ou le manager-jmx les rôles." –