有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java第一个tomcat应用程序“ant安装”错误“NoClassDefFound”

JSP/servlet是我想学习的东西,所以我开始创建我的第一个tomcat应用程序

我已经阅读了apache教程here,并开始尝试在tomcat(具有适当目录结构的简单测试html文件)中安装我的应用程序。现在,我意识到它的一厢情愿,希望使用stock构建。xml由教程提供,但我需要从某个地方开始,我还不知道如何自己编写一个。我寻找了一些例子,但它们似乎没有“安装”目标,也许它们不是web应用程序

我的项目生成,但没有通过ant安装到tomcat上。当我尝试“ant安装”我的控制台输出时

 ant install
Buildfile: /home/mark/svn/tomcatapp/build.xml
Trying to override old definition of datatype resources

prepare:

compile:
    [javac] /home/mark/svn/tomcatapp/build.xml:299: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds

install:

BUILD FAILED
/home/mark/svn/tomcatapp/build.xml:375: java.lang.NoClassDefFoundError: org/apache/tomcat/util/buf/B2CConverter
    at org.apache.catalina.util.Base64.encode(Base64.java:173)
    at org.apache.catalina.ant.AbstractCatalinaTask.execute(AbstractCatalinaTask.java:204)
    at org.apache.catalina.ant.DeployTask.execute(DeployTask.java:211)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    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:392)
    at org.apache.tools.ant.Target.performTasks(Target.java:413)
    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:811)
    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:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    ... 19 more

Total time: 0 seconds

为什么找不到类,它不包含在tomcat安装中?有一个类似的问题,但我没有尝试使用manager应用程序,我不知道如何编辑类路径-我需要编译一个。java类为项目创建一个

我确信一个更简单的构建文件就足够了,但我不确定哪些组件是相关的。很抱歉提出了这些可能非常愚蠢的问题

这是我的构建中的安装目标。xml文件

  <target name="install" depends="compile"
   description="Install application to servlet container">

    <deploy url="${manager.url}"
       username="${manager.username}"
       password="${manager.password}"
           path="${app.path}"
       localWar="file://${build.home}"/>

  </target>

共 (4) 个答案

  1. # 1 楼答案

    简短回答:

    • 复制文件tomcat util。jar从CATALINA_HOME/libANT_HOME/lib
    • 发出ant命令时,添加带有该文件路径的-lib选项, 例如
      ant -lib C:\Tomcat8\lib\tomcat-util.jar install
      (提供的CATALINA_HOME指向C:\Tomcat8

    说明:

    我在Tomcat 8.0.36中遇到了类似的问题。根据错误消息,未找到类org.apache.tomcat.util.codec.binary.Base64<教程中的em>antinstall命令执行deploy任务,这不是ant中的标准任务,而是Tomcat提供的自定义任务。部署任务由DeployTask类(类的全名为org.apache.catalina.ant.DeployTask)实现,该类位于CATALINA_HOME/lib/catalina-ant.jar。自定义任务(如DeployTask)通常依赖于外部库,因此需要将这些库添加到Ant的类路径中。有关更多信息,请参见Optional Tasks in Ant

  2. # 2 楼答案

    我还运行了新版本的Tomcat(7.0.32),在尝试遵循教程时遇到了相同的错误。我知道这不是最好的解决方案,但可能会对您的调试有所帮助:当我将-lib选项与ant一起使用时,我能够使它在jar文件中拉入所需的类: ant -lib /usr/local/apache-tomcat-7.0.32/lib/ -lib /usr/local/apache-tomcat-7.0.32/bin/ install(在我的例子中/usr/local/apache-tomcat-7.0.32$CATALINA_HOME

  3. # 4 楼答案

    如果您使用的是示例构建。xml,更改

    localWar="file://${build.home}"
    

    war="${dist.home}/${app.name}-${app.version}.war"
    

    如果你有卡特琳娜蚂蚁。ANT_HOME/lib中的jar。请尝试从此位置删除它

    重新启动tomcat

    这对我很有效