NoClassDefFoundError:org / apache / tomcat / util / codec / binary / Base64

时间:2013-09-10 10:28:19

标签: java spring tomcat ant

仍然试图使无望的过时official spring tutorial的正面或反面。

这一次,这是主题中的错误:

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相关的目标时,我仍然会收到该消息。也许某人可以提出一系列调查建议吗?

Google似乎没有提供任何内容relevant

更新 下面提供了完整的主类路径引用。

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

5 个答案:

答案 0 :(得分:4)

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

感谢@akostadinov为正确的方向做准备。

答案 1 :(得分: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 installation / conf dir

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

答案 2 :(得分:0)

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

所以我认为选项:

  • 更新至7.0.39 +
  • 从其他地方使用它 org / apache / commons / codec / binary / Base64 (commons-codec:commons-codec)

答案 3 :(得分:0)

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

答案 4 :(得分:0)

对于tomcat版本7及更高版本,只需在tomcat-util.jar文件中加入build.xml

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