Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ant,Tomcat构建错误:java.lang.NoClassDefFoundError:org/apache/Tomcat/util/buf/B2CConverter_Java_Tomcat_Ant_Spring Mvc - Fatal编程技术网

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

Ant,Tomcat构建错误:java.lang.NoClassDefFoundError:org/apache/Tomcat/util/buf/B2CConverter,java,tomcat,ant,spring-mvc,Java,Tomcat,Ant,Spring Mvc,Tomcat版本:7.0.20 我正在努力学习以下Spring MVC教程: 在本教程中,将设置一个ant构建脚本,以便使用管理器部署到tomcat。但是,在尝试运行任何tomcat任务时,我都会遇到一些问题 首先,在本教程中,他们仍然使用被弃用的org.apache.catalina.ant.InstallTask,因此我改为org.apache.catalina.ant.DeployTask 现在的问题是,在尝试运行Tomcat任务时,我得到: java.lang.NoClassDefFo

Tomcat版本:7.0.20

我正在努力学习以下Spring MVC教程:

在本教程中,将设置一个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
探测jar,以确定是否有任何jar包含该类。我发现
tomcatcoyote.jar
拥有这个类。即使将其包含在文件集中,问题也没有得到解决


有人有什么想法吗?

我通过将类路径更改为

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

这似乎对我有用(Tomcat 7.0.21,OS X):


像杰森一样,我尝试了艾丹的答案,但没有成功。在Tomcat7中,管理器界面发生了一些变化。您必须使用/manager/text/list,而不是在URL中使用/manager/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>

我还必须将“管理员脚本”角色添加到我的管理员用户中,以便该用户具有此操作的适当权限:

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

我不知道为什么会发生这种情况,但这里有一个解决方法:

我正在寻找解决方案,一旦我得到它,我会尽量不忘记把它张贴在这里


我使用opensuse。

我使用的是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>

其他答案都不适合我。相反,我将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似乎没有正确地包含这些文件。

在学习同一教程时,我发现了相同的错误。 我必须做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>

其次,更改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>

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

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


然后它对我有效=)

我是Spring新手,甚至是第一次使用tomcat,我只是尝试在build.xml(在每个tomcat任务中)中将classpath添加到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命令正常工作,可以在build.properties文件中更改manager url,而不是在build.xml文件中定义“list”目标时更改url

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

在做了上述更改并运行了“ant list”之后,我得到的错误是, java.io.FileNotFoundException:..../manager/text/list”。 解决方法是从tomcat的安装目录启动它,而不是使用eclipse启动它。
启动tomcat后,首先在浏览器中尝试“localhost:8080”。这将显示tomcat页面。然后尝试运行“ant list”。它工作正常,上述问题已得到解决。

我建议对以前的答案稍作修改

Tomcat 7文档中强烈反对将用户配置为同时具有manager gui和manager脚本角色。这会使您的站点容易受到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用户的用户名和密码,因此没有负担进行更安全的配置。

三件事-

  • 如果使用Tomcat7.x 更改catalina ant类路径的文件集

    <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 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中更改用户,以授予用户作为管理器脚本的权限

  • 将tomcat.manager.url属性更改为
    http://localhost:8080/manager/text
  • 三件事-

    如果使用Tomcat 7.x,请更改catalina ant类路径的文件集

    <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 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中更改用户,以授予用户作为管理器脚本的权限


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

    对我有效的方法是将四个jar文件添加到构建路径中

    运行->运行配置->选择您的程序,选择右侧的类路径选项卡,单击用户条目,然后从tomcat目录添加外部4个JAR


    在这之后,my build.xml像以前一样运行

    您只需要添加
    catalina ant.jar
    tomcat coyote.jar
    tomcat util.jar
    tomcat_home/lib/
    目录到
    ant_home/lib/
    目录,我在这里发现了一个类似的情况:但是解决方案与这里提供的是相同的,不起作用k对我来说。如果这意味着什么的话,我现在在Mac OS X上。我在做这项工作时也遇到了问题,最后缺少的一步是:从$ant_HOME/lib中删除catalina-ant.jar,如果你在上一次试错过程中复制了它的话。谢谢你的回答。不过基本上和Aidan的一样。我无论如何都尝试了,得到了相同的结果。这很好我给Tomcat7的安装提供了一些建议,但我不认为