Подтвердить что ты не робот

Ant, ошибка сборки Tomcat: java.lang.NoClassDefFoundError: org/apache/tomcat/util/buf/B2CConverter

Tomcat Версия: 7.0.20

Я пытаюсь проработать следующий учебник по Spring MVC: http://static.springsource.org/docs/Spring-MVC-step-by-step/part1.html

В этом учебнике устанавливается ant build script для развертывания в 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 должен быть в пути к классу, поэтому я добавил это в набор файлов с каталитикой ant.jar, но, по-видимому, класс org.apache.tomcat.util.buf.B2CConverter не находится в есть.

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

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

4b9b3361

Ответ 1

Я получил эту работу, изменив путь к классу

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

Ответ 2

Как и Джейсон, я попробовал ответить Айдану, и это не сработало. С TomCat 7 интерфейс менеджера немного изменился. Вместо использования /manager/list в URL-адресе вы должны использовать /manager/text/list. Поэтому я изменил задачу списка в файле build.xml на следующее:

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

Мне также пришлось добавить роль "manager- script" моему администратору, чтобы он имел правильные привилегии для этой операции:

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

Ответ 3

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

Сначала измените цель "list" для build.xml, чтобы добавить выше/текст:

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

Во-вторых, измените путь каталины 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>

И, наконец, добавьте это в файл tomcat-users.xml:

<role rolename="manager-script"/>
  <user username="tomcat" password="s3cret" roles="manager-gui,tomcat,manager-script"/>

И тогда это сработало для меня =)

Ответ 4

Мне показалось, что это работает для меня (Tomcat 7.0.21, OS X):

<path id="catalina-ant-classpath">
  <fileset dir="${tomcat_dir}/lib">
    <include name="catalina-ant.jar"/>
    <include name="tomcat-coyote.jar"/>
    <include name="tomcat-util.jar"/>
  </fileset>
  <fileset dir="${tomcat_dir}/bin">
    <include name="tomcat-juli.jar"/>
  </fileset>
</path>
<taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask" classpathref="catalina-ant-classpath"/>
<taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask" classpathref="catalina-ant-classpath"/>
<taskdef name="list" classname="org.apache.catalina.ant.ListTask" classpathref="catalina-ant-classpath"/>

Ответ 5

Чтобы заставить все команды ant работать, URL-адрес менеджера может быть изменен в файле build.properties вместо изменения URL-адреса при определении цели "списка" в файле build.xml.

tomcat.manager.url=http://localhost:8080/manager/text

Ответ 7

Ни один другой ответ не работает для меня. Вместо этого я скопировал файлы TOMCAT_HOME/lib/catalina- ant.jar, TOMCAT_HOME/lib/tomcat-coyote.jar, TOMCAT_HOME/lib/tomcat-util.jar и TOMCAT_HOME/bin/tomcat-juli.jar в каталог ANT_HOME/lib.

Кажется, что classpathref не включает эти файлы должным образом.

Ответ 8

что сработало для меня, было добавление четырех файлов jar в путь сборки

Run → run configuration → выберите вашу программу, выберите вкладку Classpath справа, щелкните User Entries, затем добавьте внешние 4 баночки из каталога tomcat

После этого мой файл build.xml работает, как раньше

Ответ 10

Я нахожусь в 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>

Ответ 11

Я новичок в 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>

Ответ 12

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

Ответ 13

Я бы предложил незначительную модификацию предыдущих ответов.

Конфигурирование пользователя с ролью менеджера-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"/>

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

Ответ 14

Три вещи -

  • При использовании Tomcat 7.x Изменить набор файлов для каталога 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, чтобы предоставить пользователю разрешение в качестве менеджера script

  • Измените свойство tomcat.manager.url на http://localhost:8080/manager/text

Ответ 15

Три вещи -

Если вы используете Tomcat 7.x Изменить набор файлов для каталогизации ant -classpath

    <path id="catalina-ant-classpath">
    <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> 

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

Измените свойство tomcat.manager.url на http://localhost:8080/manager/text

Ответ 16

Вам просто нужно добавить catalina-ant.jar tomcat-coyote.jar и tomcat-util.jar из tomcat_home/lib/ в каталог ant_home/lib/