我在OS X Snow Leopard上使用Tomcat 6,Apache Ant 1.7.1和JDK 1.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)tomcat-users.xml :
当我运行部署目标时,一切正常(它将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
如果有人能告诉我我做错了什么,真的很感激......
感谢您抽出宝贵时间阅读此内容......
快乐的节目。
答案 0 :(得分:6)
它失败了,因为Tomcat管理器应用程序返回HTTP状态代码403,这意味着禁止。因此访问被拒绝。
当我搜索您的问题时,我发现您的post on JavaRanch包含您的tomcat-users.xml
文件(此处未包含在内)。我发现没有运行manager
任务所需的undeploy
角色的用户。尝试将manager
角色添加到您的admin
用户。
<role rolename="manager"/>
<user username="admin" password="admin" roles="admin,manager"/>
来自Tomcat docs:
要启用对Manager Web应用程序的访问,您必须创建新的用户名/密码组合并将角色名称管理器与其关联,或者将管理员角色添加到某些现有的用户名/密码组合中。
如果您想知道为什么deploy
任务在您undeploy
任务没有的情况下工作似乎有效,那是因为deploy
任务似乎没有使用经理应用程序为其部署。相反,它只是将war
复制到目标目录。
答案 1 :(得分:2)
请尝试为您正在使用的tomcat用户添加角色manager-script
。
e.g。
<role rolename="manager-script"/>
<user username="admin" password="admin" roles="manager-script"/>
答案 2 :(得分: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>
大多数时候人们会错过第一个角色。停止并重新启动服务器,你会很好。