简体   繁体   English

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

[英]Ant, Tomcat Build Error: java.lang.NoClassDefFoundError: org/apache/tomcat/util/buf/B2CConverter

Tomcat Version: 7.0.20 Tomcat版本:7.0.20

I am attempting to work my way through the following Spring MVC tutorial: http://static.springsource.org/docs/Spring-MVC-step-by-step/part1.html 我正在尝试通过以下Spring MVC教程: http//static.springsource.org/docs/Spring-MVC-step-by-step/part1.html

In this tutorial, an ant build script is setup to deploy to tomcat using the manager. 在本教程中,将使用管理器设置ant构建脚本以部署到tomcat。 However, I run into some problems when I try to run any of the tomcat tasks. 但是,当我尝试运行任何tomcat任务时,我遇到了一些问题。

First off, in the tutorial, they still use org.apache.catalina.ant.InstallTask which is deprecated, so I changed to org.apache.catalina.ant.DeployTask . 首先,在教程中,他们仍然使用不推荐使用的org.apache.catalina.ant.InstallTask ,因此我更改为org.apache.catalina.ant.DeployTask

Now the problem is that when trying to run the Tomcat tasks I get: 现在的问题是,当我尝试运行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

So I Googled around a bit and found some information stating that tomcat-utils.jar should be in the class path so I added that into the fileset with the catalina-ant.jar but apparently the org.apache.tomcat.util.buf.B2CConverter class is not in there. 所以我用Google搜索了一下,发现一些信息表明tomcat-utils.jar应该在类路径中,所以我用catalina-ant.jar将其添加到文件集中,但显然是org.apache.tomcat.util.buf.B2CConverter类不在那里。

So next I started probing the jars with jar -tf to find out if any contained the class. 接下来我开始用jar -tf探测罐子,看看是否包含了这个类。 I found out that tomcat-coyote.jar had the class. 我发现tomcat-coyote.jar有这个类。 Even with including this in the fileset, the problem is not resolved. 即使将其包含在文件集中,问题也无法解决。

Does anyone have any ideas? 有没有人有任何想法?

I got this working by changing the classpath to 通过将类路径更改为,我得到了这个工作

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

Like Jason, I tried Aidan's answer and it did not work. 像Jason一样,我尝试了Aidan的答案而且没有用。 With TomCat 7 the manager interface has changed a little. 使用TomCat 7,管理器界面发生了一些变化。 Instead of using /manager/list in the URL you have to use /manager/text/list. 而不是在URL中使用/ manager / list,您必须使用/ manager / text / list。 So I changed the list task in build.xml to the following: 所以我将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>

I also had to add the "manager-script" role to my admin user so that it would have the proper privileges for this operation: 我还必须将“manager-script”角色添加到我的管理员用户,以便它具有此操作的适当权限:

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

I found the same error when following the same tutorial. 我在遵循相同的教程时发现了同样的错误。 I had to make 3 changes so that the targets run correctly. 我必须进行3次更改,以便目标正确运行。

First, change the build.xml "list" target to add the /text above mentioned: 首先,更改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>

Second, change the catalina ant classpath: 第二,改变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>

And finally, add this to the tomcat-users.xml file: 最后,将其添加到tomcat-users.xml文件中:

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

And then it worked for me =) 然后它对我有效=)

为了使所有ant命令工作,可以在build.properties文件中更改管理器url,而不是在build.xml文件中定义“list”目标时更改url。

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

This seemed to work for me (Tomcat 7.0.21, OS X): 这似乎对我有用(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"/>

Also have a look at my Catalina-Ant for Tomcat 7 article here: 另请查看我的Catalina-Ant for Tomcat 7文章:

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

what worked for me was adding the four jar files to the build path 对我有用的是将四个jar文件添加到构建路径

Run -> run configuration -> choose you program, select Classpath tab on the right, click User Entries, then add external 4 jars from the tomcat directory 运行 - >运行配置 - >选择程序,选择右侧的Classpath选项卡,单击User Entries,然后从tomcat目录添加外部4个jar

After this my build.xml runs like before 在此之后,我的build.xml像以前一样运行

None of the other answer work for me. 其他答案都不适合我。 Instead I copied TOMCAT_HOME/lib/catalina-ant.jar, TOMCAT_HOME/lib/tomcat-coyote.jar, TOMCAT_HOME/lib/tomcat-util.jar and TOMCAT_HOME/bin/tomcat-juli.jar to the ANT_HOME/lib directory. 相反,我将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目录中。

It seems like the classpathref doesn't include these files properly. 似乎classpathref没有正确包含这些文件。

I new to Spring or even first use to tomcat, i'm just trying add classpath to subsection tomcat task in build.xml (in every tomcat task) and i dont why, but its works. 我刚接触Spring,甚至第一次使用tomcat,我只是尝试在build.xml中添加classpath到tomcat任务(在每个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>

执行上面的更改并运行“ant list”之后,我收到了错误,java.io.FileNotFoundException:.... / manager / text / list“。它是通过从其安装目录启动tomcat而不是使用eclipse启动来解决的启动tomcat后,首先在浏览器中尝试“localhost:8080”。这应该显示tomcats页面。然后尝试运行“ant list”。它可以解决上面的问题。

I would suggest a minor modification to the previous answers. 我建议对之前的答案稍加修改。

Configuring a user to have both manager-gui and manager-script roles is strongly discouraged in the Tomcat 7 documentation 1 . 在Tomcat 7文档1中强烈建议不要将用户配置为具有manager-gui和manager-script角色。 It can leave your site open to CSRF attacks. 它可以使您的网站对CSRF攻击开放。

Defining separate users with different passwords for each role would be safer: 为每个角色定义具有不同密码的单独用户将更安全:

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

In general, you only need to memorize the user name and password for the GUI user, so it's no burden to have a safer configuration. 通常,您只需要记住GUI用户的用户名和密码,因此拥有更安全的配置不会有任何负担。

Three Things- 三件事-

  • If using Tomcat 7.x Change fileset for catalina-ant-classpath 如果使用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> 

  • change the user in tomcat-users.xml to give user permission as manager-script 更改tomcat-users.xml中的用户以将用户权限授予manager-script

  • Change tomcat.manager.url property to http://localhost:8080/manager/text 将tomcat.manager.url属性更改为http://localhost:8080/manager/text

Three Things- 三件事-

If using Tomcat 7.x Change fileset for catalina-ant-classpath 如果使用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> 

change the user in tomcat-users.xml to give user permission as manager-script 更改tomcat-users.xml中的用户以将用户权限授予manager-script

Change tomcat.manager.url property to http://localhost:8080/manager/text 将tomcat.manager.url属性更改为http://localhost:8080/manager/text

您只需tomcat_home/lib/目录中的catalina-ant.jar tomcat-coyote.jartomcat-util.jar tomcat_home/lib/ant_home/lib/目录中

I'm not sure why is this happening, but here's a workaround: http://www.coderanch.com/t/553582/Tomcat/java-lang-NoClassDefFoundError-org-apache 我不确定为什么会这样,但这是一个解决方法: http//www.coderanch.com/t/553582/Tomcat/java-lang-NoClassDefFoundError-org-apache

I'm looking for the solution, once I get it I will try not to forget to post it in here. 我正在寻找解决方案,一旦我得到它,我会尽量忘记在这里发布它。

I use opensuse. 我用opensuse。

I am on Mac OS X. This worked for me: 我在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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Tomcat 构建错误:java.lang.NoClassDefFoundError - Tomcat Build Error: java.lang.NoClassDefFoundError Spring Boot REST服务 - 抛出java.lang.NoClassDefFoundError:org / apache / tomcat / util / ExceptionUtils - Spring Boot REST service - throws java.lang.NoClassDefFoundError: org/apache/tomcat/util/ExceptionUtils java.lang.NoClassDefFoundError: org/apache/tomcat/util/descriptor/tld/TldParser - java.lang.NoClassDefFoundError: org/apache/tomcat/util/descriptor/tld/TldParser java.lang.NoClassDefFoundError:org / apache / tomcat / util / codec / binary / Base64 - java.lang.NoClassDefFoundError: org/apache/tomcat/util/codec/binary/Base64 java.lang.NoClassDefFoundError响应Hanlder apache tomcat - java.lang.NoClassDefFoundError ResponseHanlder apache tomcat 在 JBOSS EAP 版本从 6.4 升级到 7.4 后出现部署时间错误 java.lang.NoClassDefFoundError: org/apache/tomcat/util/res/StringManager - Getting deployment time error java.lang.NoClassDefFoundError: org/apache/tomcat/util/res/StringManager after JBOSS EAP Version Upgrade from 6.4 to 7.4 java.lang.NoClassDefFoundError:org / apache / tools / ant / util / ReaderInputStream javaFx + intelliJ - java.lang.NoClassDefFoundError: org/apache/tools/ant/util/ReaderInputStream javaFx+intelliJ 从Ant启动tomcat 7时的java.lang.NoClassDefFoundError - java.lang.NoClassDefFoundError while starting tomcat 7 from Ant java.lang.NoClassDefFoundError:org.apache.axiom.util.UIDGenerator - java.lang.NoClassDefFoundError: org.apache.axiom.util.UIDGenerator linux中的tomcat:java.lang.NoClassDefFoundError:org / apache / juli / logging / LogFactory - tomcat in linux:java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM