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 ]

29 голосов
/ 01 сентября 2011

Я получил эту работу, изменив 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>
</path>
15 голосов
/ 09 ноября 2011

Как и Джейсон, я попробовал ответ Эйдана, но он не сработал.С 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"/>
12 голосов
/ 28 мая 2012

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

Сначала измените цель 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>

Во-вторых, измените classpath каталины и муравья:

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

А потом у меня это сработало =)

3 голосов
/ 29 сентября 2012

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

tomcat.manager.url=http://localhost:8080/manager/text
3 голосов
/ 21 сентября 2011

Мне показалось, что это работает (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"/>
2 голосов
/ 07 апреля 2012

Также посмотрите мою статью о Catalina-Ant для Tomcat 7 здесь:

http://paulgrenyer.blogspot.co.uk/2011/11/catalina-ant-for-tomcat-7.html

1 голос
/ 10 июня 2015

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

Выполнить -> запустить конфигурацию -> выбрать свою программу, выбрать вкладку Classpath справа, щелкнуть Записи пользователя, затем добавить 4 внешних jar-файла из каталога tomcat

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

1 голос
/ 06 января 2012

Ни один другой ответ не работает для меня. Вместо этого я скопировал 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 не включает эти файлы должным образом.

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

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

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

Three Things-

При использовании Tomcat 7.x Измените набор файлов для catalina-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

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