Ant, Tomcat Ошибка сборки: java.lang.NoClassDefFoundError: org / apache / tomcat / util / buf / B2CConverter - PullRequest
32 голосов
/ 31 августа 2011

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

Так что я немного погуглил и нашел некоторую информацию о том, что tomcat-utils.jar должен быть в пути к классампоэтому я добавил это в набор файлов с помощью catalina-ant.jar, но, видимо, класса org.apache.tomcat.util.buf.B2CConverter там нет.

Итак, в следующий раз я начал исследовать банки с помощью jar -tf, чтобы выяснить, есть ли в нихучебный класс.Я узнал, что у tomcat-coyote.jar был класс.Даже при включении этого в набор файлов проблема не решается.

У кого-нибудь есть идеи?

Ответы [ 16 ]

0 голосов
/ 15 июля 2014

Три вещи-

  • При использовании Tomcat 7.x Изменить набор файлов для catalina-ant-classpath

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

  • изменить пользователя в tomcat-users.xml, чтобы дать пользователю разрешение в качестве менеджера-скрипта

  • Изменить свойство tomcat.manager.url на http://localhost:8080/manager/text
0 голосов
/ 30 ноября 2013

Я бы посоветовал внести незначительные изменения в предыдущие ответы.

Настраивать пользователя на наличие ролей manager-gui и manager-script настоятельно не рекомендуется в документации Tomcat 7 1 .Это может сделать ваш сайт открытым для CSRF-атак.

Определение отдельных пользователей с разными паролями для каждой роли будет более безопасным:

<role rolename="manager-"/>
<role rolename="manager-script"/>
<user username="admin-gui" password="s3cret1" roles="manager-gui"/>
<user username="admin-script" password="s3cret2" roles="manager-script"/>

В общем, вам нужно запомнить только имя пользователя ипароль для пользователя графического интерфейса, поэтому безопасная конфигурация не обременительна.

0 голосов
/ 06 сентября 2013

После внесения вышеуказанных изменений и запуска "списка муравьев" я получил ошибку как, java.io.FileNotFoundException: .... / manager / text / list ". Это было решено путем запуска tomcat из его установочного каталога и без использования eclipse для его запуска. После запуска tomcat сначала попробуйте «localhost: 8080» в браузере. Это должно отобразить страницу котов. Затем попробуйте запустить "список муравьев". Это работает, и проблема выше решена.

0 голосов
/ 27 сентября 2012

Я новичок в Spring или даже впервые использую tomcat, я просто пытаюсь добавить classpath к задаче tomcat подраздела в build.xml (в каждой задаче tomcat) и не знаю почему, но она работает.

<taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask">
    <classpath>
        <path location="${appserver.home}/lib/catalina-ant.jar"/>
        <path location="${appserver.home}/lib/tomcat-coyote.jar"/>
        <path location="${appserver.home}/lib/tomcat-util.jar"/>
        <path location="${appserver.home}/bin/tomcat-juli.jar"/>
    </classpath>
</taskdef>
0 голосов
/ 05 декабря 2011

Я на Mac OS X. Это сработало для меня:

<!-- ============================================================== -->
<!-- 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-coyote.jar"/>
        <include name="tomcat-util.jar"/>
      </fileset>
      <fileset dir="${appserver.home}/bin">
        <include name="tomcat-juli.jar"/>
      </fileset>        
    </path>
0 голосов
/ 01 декабря 2011

Я не уверен, почему это происходит, но вот обходной путь: http://www.coderanch.com/t/553582/Tomcat/java-lang-NoClassDefFoundError-org-apache

Я ищу решение, как только я его получу, я постараюсь не забыть опубликовать его здесь.

Я использую opensuse.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...