taskdef class org.apache.catalina.ant.InstallTask can 找不到

2022-09-02 14:14:40

在 Eclipse 中,我的构建版本收到了 5 个警告.xml:

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

编辑:我还在C:\apache-ant-1.8.4\lib中添加了catalina-ant.jar

代码的更多部分:

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

怎么了?


答案 1

在tomcat 7中,InstallTask被DeplodTask取代。

更改您的声明,例如

<taskdef name="install" classname="org.apache.catalina.ant.InstallTask">
    <classpath refid="catalina-ant-classpath"/>
</taskdef>

 <taskdef name="install" classname="org.apache.catalina.ant.DeployTask"> 
  <classpath refid="catalina-ant-classpath"/> 
 </taskdef>

答案 2

我认为只提到CATALINA_HOME是行不通的。你需要把 Catalina-ant jars 放到 Ant 的类路径上。在tomcat 7中,有4个用于此目的的jar,而在早期版本中只有一个jar。请点击此链接

正如链接所引述的,

首先,确保Tomcat管理器配置为由Catalina-Ant使用。确保 包含在 中其中一个用户的角色中。例如:manager-scriptTOMCAT_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

至少有三种方法可以使 JAR 可供 Ant 使用:

  • 将 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>

其中有 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 目录的路径,也是 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 管理器的用户名和密码。Tomcat.password

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

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


推荐