18

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

怎么了?

4

6 回答 6

66

在 tomcat 7 中,InstallTask​​ 被 DeployTask 取代。

更改您的声明,例如

老的

<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>
于 2012-12-13T06:26:49.373 回答
22

我认为只提到 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 文件的路径。

于 2012-08-25T13:41:10.493 回答
4

猜你可能需要做这个改变,因为你的问题中没有更多细节

<fileset dir="${appserver.home}/common/lib">
<include name="servlet*.jar"/>
</fileset> 

我相信您的 build.xml 中可能有上述设置请将 ${appserver.home} 更改为包含 tomcat 安装的目录

<fileset dir="C:/Program Files/Apache Software Foundation/Tomcat 5.5/common/lib">
<include name="servlet*.jar"/>
</fileset> 
于 2012-08-25T13:43:15.153 回答
4

在 tomcat 7 中,org.apache.catalina.ant 包含一组任务,可用于与 Manager 应用程序交互,以从正在运行的 Tomcat 实例部署、取消部署、列出、重新加载、启动和停止 Web 应用程序。用 DeployTask 替换 InstallTask​​ 将解决构建问题。

<taskdef name="install" classname="org.apache.catalina.ant.DeployTask">
        <classpath refid="catalina-ant-classpath"/>
    </taskdef>
    <taskdef name="reload" classname="org.apache.catalina.ant.ReloadTask">
        <classpath refid="catalina-ant-classpath"/>`enter code here`
    </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>
于 2014-06-29T22:13:09.040 回答
1

如果您使用的是 eclipes,那么您需要按照以下步骤更改您的 ant_home 位置,导航到 window>prefrances>Ant>runtime>classpath>AntHome 单击 anthome 按钮并提供您的 anthome 目录路径。

为了解决您的问题,您需要将 catalina-ant.jar 复制到 anthome/lib 文件夹中

谢谢,沙拉德

于 2013-08-11T09:51:16.840 回答
1

尝试以下方法,它将解决您的问题:

1) Click Eclipse menu Window > Preferences
2) Click Ant > Runtime
3) Under Classpath tab, select Ant Home Entries and click button Add External JARs
4) Browse and open $ECLIPSE_HOME/plugins/org.apache.ant_myscrum/lib/catalina-ant.jar
5) Click Apply and OK button

遵循指示 3

遵循指示 4

于 2015-07-28T03:43:23.050 回答