Java 使用Ant部署web应用会导致NoClassDefFoundError

Java 使用Ant部署web应用会导致NoClassDefFoundError,java,tomcat,ant,Java,Tomcat,Ant,我使用的是Ant 1.9.3和Tomcat 8.0版。我正在使用Antdeploy目标,使用manager凭据在apachetomcat中部署web应用。deploy目标失败,出现以下异常: java.lang.NoClassDefFoundError: org/apache/tomcat/util/codec/binary/Base64 at org.apache.catalina.ant.AbstractCatalinaTask.execute(AbstractCatali

我使用的是Ant 1.9.3和Tomcat 8.0版。我正在使用Ant
deploy
目标,使用
manager
凭据在apachetomcat中部署web应用。
deploy
目标失败,出现以下异常:

java.lang.NoClassDefFoundError:
 org/apache/tomcat/util/codec/binary/Base64
        at org.apache.catalina.ant.AbstractCatalinaTask.execute(AbstractCatalina
Task.java:204)
        at org.apache.catalina.ant.DeployTask.execute(DeployTask.java:196)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.jav
a:106)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.Target.execute(Target.java:435)
        at org.apache.tools.ant.Target.performTasks(Target.java:456)
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
        at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExe
cutor.java:41)
        at org.apache.tools.ant.Project.executeTargets(Project.java:1248)
        at org.apache.tools.ant.Main.runBuild(Main.java:851)
        at org.apache.tools.ant.Main.startAnt(Main.java:235)
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
Caused by: java.lang.ClassNotFoundException: org.apache.tomcat.util.codec.binary
.Base64
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
        ... 19 more
当我试图在
tomcat util.jar
中的包
org\apache\tomcat\util\codec\binary\
中找到类
Base64
时,它位于类路径中,我已经通过Ant构建文件中的一个回音验证了它


我无法解决此问题。

请确保已在类路径中添加tomcat-util.jar,如下所示

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

以防有人遇到与我相同的问题:

我在上遵循教程,在尝试运行
ant安装时遇到了相同的
NoClassDefFoundError
问题

本教程提到,您必须将
$CATALINA_HOME/lib/CATALINA ant.jar
1(其中包含ant自定义任务的实现代码)复制到ant安装的
lib
目录中

但是,没有提到,您需要为
tomcat util.jar
做同样的事情。当我将
tomcat util.jar
复制到我的Ant目录时,一切都开始工作()。


1
$CATALINA_HOME
是您的Tomcat安装目录,例如
/usr/share/tomcat8

您需要提供ANT,我们使用它来解决您的问题。您声明jar位于类路径上,但JVM错误声明为其他状态。我怀疑在您的构建中声明tomcat“deploy”任务的方式有问题。我在1.9.4中也遇到了这个问题。我已将下面答案中的文本添加到我的build.xml文件的path部分,但得到的错误与以前完全相同。我不知道如何像OP一样查看tomcat-util.jar文件的内部,而不获取一堆我认为是Java字节码的内容,因此我不知道如何验证。下面是我正在使用的教程的一部分。我犯了几个微妙的版本控制错误;当用户被要求调用
ant list
时,这一项会出现在底部。