Ant,Tomcat构建错误:java.lang.NoClassDefFoundError:org/apache/tomcat/util/buf/B2CConverter

Jas*_*ner 32 java ant tomcat spring-mvc

Tomcat版本:7.0.20

我正在尝试通过以下Spring MVC教程:http: //static.springsource.org/docs/Spring-MVC-step-by-step/part1.html

在本教程中,将使用管理器设置ant构建脚本以部署到tomcat.但是,当我尝试运行任何tomcat任务时,我遇到了一些问题.

首先,在教程中,他们仍然使用org.apache.catalina.ant.InstallTask已弃用的,所以我改为org.apache.catalina.ant.DeployTask.

现在的问题是,当我尝试运行Tomcat任务时,我得到:

java.lang.NoClassDefFoundError: org/apache/tomcat/util/buf/B2CConverter
    at org.apache.catalina.util.Base64.encode(Base64.java:177)
    at org.apache.catalina.ant.AbstractCatalinaTask.execute(AbstractCatalinaTask.java:204)
    at org.apache.catalina.ant.AbstractCatalinaTask.execute(AbstractCatalinaTask.java:150)
    at org.apache.catalina.ant.ReloadTask.execute(ReloadTask.java:45)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:390)
    at org.apache.tools.ant.Target.performTasks(Target.java:411)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
    at org.apache.tools.ant.Main.runBuild(Main.java:809)
    at org.apache.tools.ant.Main.startAnt(Main.java:217)
    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.buf.B2CConverter
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 21 more
Run Code Online (Sandbox Code Playgroud)

所以我用Google搜索了一下,发现一些信息表明tomcat-utils.jar应该在类路径中,所以我用catalina-ant.jar将其添加到文件集中,但显然org.apache.tomcat.util.buf.B2CConverter该类不在那里.

接下来,我开始探测罐子,jar -tf找出是否包含了这个类.我发现tomcat-coyote.jar有班级.即使将其包含在文件集中,问题也无法解决.

有没有人有任何想法?

小智 28

通过将类路径更改为,我得到了这个工作

<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-coyote.jar"/>
        <include name="tomcat-util.jar"/>
    </fileset>
    <fileset dir="${appserver.home}/bin">
                <include name="tomcat-juli.jar"/>
    </fileset>
</path>
Run Code Online (Sandbox Code Playgroud)

  • 我在完成这项工作时也遇到了问题,最后遗漏的步骤是:从$ ANT_HOME/lib中删除catalina-ant.jar,如果你在之前的试错会话中将其复制到那里. (3认同)

who*_*day 15

像Jason一样,我尝试了Aidan的答案而且没有用.使用TomCat 7,管理器界面发生了一些变化.而不是在URL中使用/ manager/list,您必须使用/ manager/text/list.所以我将build.xml中的list任务更改为以下内容:

<target name="list" description="List Tomcat applications">
    <list url="${tomcat.manager.url}/text"
             username="${tomcat.manager.username}"
             password="${tomcat.manager.password}"/>
</target>
Run Code Online (Sandbox Code Playgroud)

我还必须将"manager-script"角色添加到我的管理员用户,以便它具有此操作的适当权限:

  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <user username="admin" password="admin" roles="manager-gui,manager-script"/>
Run Code Online (Sandbox Code Playgroud)


Nee*_*ets 12

我在遵循相同的教程时发现了同样的错误.我必须进行3次更改,以便目标正确运行.

首先,更改build.xml"list"目标以添加上面提到的/ text:

<target name="list" description="List Tomcat applications">
    <list url="${tomcat.manager.url}/text"
          username="${tomcat.manager.username}"
          password="${tomcat.manager.password}"/>
</target>
Run Code Online (Sandbox Code Playgroud)

第二,改变catalina ant类路径:

<path id="catalina-ant-classpath">
    <fileset dir="${appserver.home}/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>
Run Code Online (Sandbox Code Playgroud)

最后,将其添加到tomcat-users.xml文件中:

<role rolename="manager-script"/>
  <user username="tomcat" password="s3cret" roles="manager-gui,tomcat,manager-script"/>
Run Code Online (Sandbox Code Playgroud)

然后它对我有效=)