一尘不染

找不到taskdef类org.apache.catalina.ant.InstallTask

tomcat

在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>

怎么了?


阅读 372

收藏
2020-06-16

共1个答案

一尘不染

我认为仅提及CATALINA_HOME无效。您需要将catalina-ant jars放在Ant的class路径上。在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文件中。Tomcat 7的Catalina-Ant需要四个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文件夹中。然后,蚂蚁会找到他们。
  • 将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>

catalina-ant-dir包含JAR的目录在哪里。通过这种方式,您无需在每台构建于其上的机器上修改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.usernameTomcat.password对于Tomcat管理用户名和密码。

webapp.name 是要部署的Tomcat应用程序的名称。

war.file是要部署的Tomcat应用程序的WAR文件的路径。

2020-06-16