我认为只提到 CATALINA_HOME 是行不通的。您需要将 catalina-ant jar 放到 Ant 的类路径中。在 tomcat 7 中,有 4 个 jar 用于此目的,而在早期版本中只有一个 jar。请点击此链接。
正如链接中所引用的,
首先,确保将 Tomcat 管理器配置为供 Catalina-Ant 使用。确保它manager-script
包含在其中一位用户的角色中TOMCAT_HOME/conf/tomcat-users.xml
。例如:
<tomcat-users>
<user name="admin" password="s3cr£t" roles="manager-gui,manager-script"/>
</tomcat-users>
Tomcat 6 的 Catalina-Ant 封装在单个 JAR 文件中。Catalina-Ant for Tomcat 7 需要四个 JAR 文件。一个来自
TOMCAT_HOME/bin
:
tomcat-juli.jar
三个来自TOMCAT_HOME/lib
:
catalina-ant.jar
tomcat-coyote.jar
tomcat-util.jar
至少有三种方法可以让 Ant 可以使用 JAR:
- 将 JAR 复制到
ANT_HOME/lib
文件夹中。然后 Ant 会找到它们。
- 将 JAR 复制到项目中的一个文件夹,您可以将其检入源代码控制系统。Ant 然后需要一个路径 id 来找到它们:
<path id="catalina-ant-classpath">
<fileset dir="${catalina-ant-dir}">
<include name="catalina-ant.jar"/>
<include name="tomcat-coyote.jar"/>
<include name="tomcat-util.jar"/>
<include name="tomcat-juli.jar"/>
</fileset>
</path>
包含 JAR 的目录在哪里catalina-ant-dir
。这样您就不需要在您构建的每台机器上修改 Ant 安装。直接从 Tomcat 7 安装中访问 JAR。Ant 然后需要一个路径 id 来找到它们:
<path id="catalina-ant-classpath">
<fileset dir="${appserver.lib}">
<include name="catalina-ant.jar"/>
<include name="tomcat-coyote.jar"/>
<include name="tomcat-util.jar"/>
</fileset>
<fileset dir="${appserver.home}/bin">
<include name="tomcat-juli.jar"/>
</fileset>
</path>
其中 appserver.lib 是 Tomcat 7 的 lib 目录
appserver.home
的路径,并且是 Tomcat 顶级安装目录的路径。这样,您构建的每个盒子都需要 Tomcat 7。
我个人的偏好是上面的2。
现在您的 Ant 脚本可以看到 Catalina-Ant JAR,您需要告诉它哪些任务可用。这些是 Ant 可用的大部分任务(如果不是全部的话)。
<taskdef name="catalina-deploy" classname="org.apache.catalina.ant.DeployTask" classpathref="catalina-ant-classpath"/>
<taskdef name="catalina-list" classname="org.apache.catalina.ant.ListTask" classpathref="catalina-ant-classpath"/>
<taskdef name="catalina-reload" classname="org.apache.catalina.ant.ReloadTask" classpathref="catalina-ant-classpath"/>
<taskdef name="catalina-findleaks" classname="org.apache.catalina.ant.FindLeaksTask" classpathref="catalina-ant-classpath"/>
<taskdef name="catalina-resources" classname="org.apache.catalina.ant.ResourcesTask" classpathref="catalina-ant-classpath"/>
<taskdef name="catalina-start" classname="org.apache.catalina.ant.StartTask" classpathref="catalina-ant-classpath"/>
<taskdef name="catalina-stop" classname="org.apache.catalina.ant.StopTask" classpathref="catalina-ant-classpath"/>
<taskdef name="catalina-undeploy" classname="org.apache.catalina.ant.UndeployTask" classpathref="catalina-ant-classpath"/>
最后,您需要一组实际完成工作的任务。虽然,正如您在上面看到的,有一些任务我只倾向于使用以下任务:
<target name = "stop-webapp">
<catalina-stop url="${tomcat.manager.url}"
username="${tomcat.username}"
password="${tomcat.password}"
path="/${webapp.name}"
failonerror="false"/>
</target>
<target name = "start-webapp">
<catalina-start url="${tomcat.manager.url}"
username="${tomcat.username}"
password="${tomcat.password}"
path="/${webapp.name}"/>
</target>
<target name = "undeploy-webapp">
<catalina-undeploy url="${tomcat.manager.url}"
username="${tomcat.username}"
password="${tomcat.password}"
path="/${webapp.name}"
failonerror="false"/>
</target>
<target name = "deploy-webapp">
<catalina-deploy url="${tomcat.manager.url}"
username="${tomcat.username}"
password="${tomcat.password}"
path="/${webapp.name}"
war="file:${war.file}"/>
</target>
tomcat.manager.url
是 Tomcat 管理器所在的 URL。这是从 Tomcat 6 到 Tomcat 7 的另一个变化。通常是:http://:8080/manager/text
.
Tomcat.username
是 Tomcat 管理器的用户名和Tomcat.password
密码。
webapp.name
是您正在部署的 Tomcat 应用程序的名称。
war.file
是您正在部署的 Tomcat 应用程序的 WAR 文件的路径。