在Eclipse中,我的build.xml收到5条警告:
taskdef class.org.apache.catalina.ant.InstallTask cannot be found taskdef class.org.apache.catalina.ant.ListTaskcannot be found taskdef class.org.apache.catalina.ant.ReloadTaskcannot be found taskdef class.org.apache.catalina.ant.StartTask cannot be found taskdef class.org.apache.catalina.ant.StopTask cannot be found
我设置了以下系统环境变量(Windows 7)
ANT_HOME: C:\apache-ant-1.8.4 CATALINA_HOME: C:\apache-tomcat-7.0.29 JAVA_HOME: C:\Program Files\Java\jdk1.6.0_34 and have added %ANT_HOME%/bin to PATH
编辑:我还添加了catalina-ant.jar到C:\ apache-ant-1.8.4 \ lib
代码的更多部分:
<!-- We need the Catalina jars for Tomcat --> <!-- * for other app servers - check the docs --> <fileset dir="${appserver.lib}"> <include name="catalina-ant.jar"/> </fileset> </path> <taskdef name="install" classname="org.apache.catalina.ant.InstallTask"> <classpath refid="catalina-ant-classpath"/> </taskdef> <taskdef name="reload" classname="org.apache.catalina.ant.ReloadTask"> <classpath refid="catalina-ant-classpath"/> </taskdef> <taskdef name="list" classname="org.apache.catalina.ant.ListTask"> <classpath refid="catalina-ant-classpath"/> </taskdef> <taskdef name="start" classname="org.apache.catalina.ant.StartTask"> <classpath refid="catalina-ant-classpath"/> </taskdef> <taskdef name="stop" classname="org.apache.catalina.ant.StopTask"> <classpath refid="catalina-ant-classpath"/> </taskdef>
怎么了?
我认为仅提及CATALINA_HOME无效。您需要将catalina-ant jars放在Ant的class路径上。在tomcat 7中,为此目的有4个jar,而在早期版本中只有一个jar。请点击此链接。
如链接中所述,
首先,请确保已将Tomcat管理器配置为供Catalina-Ant使用。确保manager- script包含在中的一位用户的角色中TOMCAT_HOME/conf/tomcat-users.xml。例如:
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文件中。Tomcat 7的Catalina-Ant需要四个JAR文件。来自 TOMCAT_HOME/bin:
TOMCAT_HOME/bin
tomcat-juli.jar
还有三个来自TOMCAT_HOME/lib:
TOMCAT_HOME/lib
catalina-ant.jar tomcat-coyote.jar tomcat-util.jar
至少有三种方法可将Ant提供给JAR: 将JAR复制到该ANT_HOME/lib文件夹中。然后,蚂蚁会找到他们。 将JAR复制到项目中的某个文件夹中,然后将其签入源代码管理系统。然后,Ant需要一个路径ID来找到它们:
至少有三种方法可将Ant提供给JAR:
ANT_HOME/lib
<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>
catalina-ant-dir包含JAR的目录在哪里。通过这种方式,您无需在每台构建于其上的机器上修改Ant安装。直接从Tomcat 7安装中访问JAR。然后,Ant需要一个路径ID来找到它们:
catalina-ant-dir
<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可用的大多数(如果不是全部)任务。
其中appserver.lib是Tomcat 7的lib目录 appserver.home的路径,也是Tomcat的顶级已安装目录的路径。这样,您构建的每个盒子都需要Tomcat 7。
appserver.home
我个人比较喜欢上面的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.password对于Tomcat管理用户名和密码。 webapp.name 是要部署的Tomcat应用程序的名称。 war.file是要部署的Tomcat应用程序的WAR文件的路径。
tomcat.manager.url是Tomcat管理器所在的URL。这是从Tomcat 6到Tomcat 7的另一种更改。通常是:http://:8080/manager/text。
tomcat.manager.url
http://:8080/manager/text
Tomcat.username而Tomcat.password对于Tomcat管理用户名和密码。
Tomcat.username
Tomcat.password
webapp.name 是要部署的Tomcat应用程序的名称。
webapp.name
war.file是要部署的Tomcat应用程序的WAR文件的路径。
war.file