7

仍在尝试对过时的官方春季教程做出正面或反面。

这次是主题的错误:

c:\Users\mkumpan\Projects\Spring testing\build.xml:152: java.lang.NoClassDefFoundError: org/apache/tomcat/util/codec/binary/Base64
<stack trace dump omitted>

这个类实际上包含在 tomcat-util.jar 中:

bash-3.1$ pwd
/c/Program Files/Tomcat/lib
bash-3.1$ jar -tf ./tomcat-util.jar | grep Base64
org/apache/tomcat/util/codec/binary/Base64.class

而且我非常确定我将它包含在 build.xml 中:

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

我什至试图更明确:

<fileset dir="C:\Program Files\Tomcat\lib\" includes="tomcat-util.jar">

没有任何效果,每次尝试运行任何与 tomcat 相关的目标时,我仍然会收到该消息。也许有人可以建议进行调查吗?

谷歌似乎没有提供任何相关的东西。

更新: 下面提供了完整的主类路径参考。

<path id="master-classpath">
    <fileset dir="${web.dir}/WEB-INF/lib">
        <include name="*/*.jar"/>
    </fileset>

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

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

    <pathelement path="${build.dir}"/>
</path>
4

5 回答 5

4

如果您在 build.xml 和 build.properties 中使用以下与 tomcat 相关的条目,则 ant 部署应该在 tomcat 7 及更高版本中工作

<!-- ============================================================== -->
<!-- Tomcat tasks - remove these if you don't have Tomcat installed -->
<!-- ============================================================== -->

<path id="catalina-ant-classpath">
    <!-- We need the Catalina jars for Tomcat -->
    <!--  * for other app servers - check the docs -->
    <fileset dir="${appserver.lib}">
        <include name="catalina-ant.jar"/>
        <include name="tomcat-util.jar"/>
    </fileset>
</path>

<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"/>
</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>

<target name="install" description="Install application in Tomcat">
    <install url="${tomcat.manager.url}"
             username="${tomcat.manager.username}"
             password="${tomcat.manager.password}"
             path="/${name}"
             war="${name}"/>
</target>

<target name="reload" description="Reload application in Tomcat">
    <reload url="${tomcat.manager.url}"
             username="${tomcat.manager.username}"
             password="${tomcat.manager.password}"
             path="/${name}"/>
</target>

<target name="start" description="Start Tomcat application">
    <start url="${tomcat.manager.url}"
             username="${tomcat.manager.username}"
             password="${tomcat.manager.password}"
             path="/${name}"/>
</target>

<target name="stop" description="Stop Tomcat application">
    <stop url="${tomcat.manager.url}"
             username="${tomcat.manager.username}"
             password="${tomcat.manager.password}"
             path="/${name}"/>
</target>

<target name="list" description="List Tomcat applications">
    <list url="${tomcat.manager.url}/text"
             username="${tomcat.manager.username}"
             password="${tomcat.manager.password}"/>
</target>

<!-- End Tomcat tasks -->

并确保在 tomcat 安装/conf 目录中的 tomcat-users.xml 中添加以下条目

  <role rolename="manager-gui"/>
  <role rolename="admin-gui"/>
  <role rolename="manager"/>
  <role rolename="manager-script"/>
  <user username="kanchan" password="kanchan" roles="manager,manager-gui,admin-gui,manager-script"/>
于 2014-02-25T20:26:33.500 回答
4

错误的 pathref 被用于必要的目标,一个不包含到急需的路径的路径tomcat-util.jar

感谢@akostadinov 朝着正确的方向前进。

于 2013-09-26T13:24:27.043 回答
0

对于任何可能在 tomcat 7 中偶然发现此问题的人。看起来好像org/apache/tomcat/util/codec/binary/Base64已添加到版本 7.0.39 中的 tomcat-coyote.jar 中。

所以我认为选项:

  • 更新到 7.0.39+
  • 从其他地方使用它org/apache/commons/codec/binary/Base64 (commons-codec:commons-codec)
于 2015-04-27T23:50:02.300 回答
0

对于 tomcat 版本7及以上,只需包含tomcat-util.jar在您的build.xml文件中

<fileset dir="${appserver.lib}">
    ...
    <include name="tomcat-util.jar"/>
    ...
</fileset>
于 2017-04-22T22:48:24.420 回答
0

在 Tomcat 8 中,相关库似乎是“tomcat-util.jar”而不是 tomcat-coyote :-)

于 2015-08-03T14:35:24.713 回答