我正在尝试部署由一个Web Servlet和一个JSP组成的简单Web应用程序。我没有使用任何框架,例如春季或任何东西,只是 helloworld web应用程序。
我正在使用蚂蚁用于部署目的。但是当我运行部署目标时,它给了我:
java.lang.noclassdeffounderror: org/apache/tomcat/util/buf/b2cconverter
我正在使用tomcat 7,并且我也将所有库在tomcat lib目录和 tomcat-juli.jar.jar.jar 中也包括在我的webcontent/web-inf/lib
中。
我的蚂蚁文件目标如下:
<!-- Configure the directory into which the web application is built -->
<property name="build" value="${basedir}/build" />
<property name="lib.dir" value="${basedir}/WebContent/WEB-INF/lib" />
<property name="src.dir" value="${basedir}/src" />
<!-- Configure the context path for this application -->
<property name="path" value="/myapp" />
<!-- Configure properties to access the Manager application -->
<property name="url" value="http://localhost:8080/manager/text" />
<property name="username" value="gbids" />
<property name="password" value="tomcat" />
<!-- Configure the custom Ant tasks for the Manager application -->
<taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask" />
<taskdef name="list" classname="org.apache.catalina.ant.ListTask" />
<taskdef name="reload" classname="org.apache.catalina.ant.ReloadTask" />
<taskdef name="findleaks" classname="org.apache.catalina.ant.FindLeaksTask" />
<taskdef name="resources" classname="org.apache.catalina.ant.ResourcesTask" />
<taskdef name="start" classname="org.apache.catalina.ant.StartTask" />
<taskdef name="stop" classname="org.apache.catalina.ant.StopTask" />
<taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask" />
<!-- Class path -->
<path id="project.classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
<include name="**/*.zip" />
</fileset>
</path>
<!-- Executable Targets -->
<target name="compile" description="Compile web application">
<javac srcdir="${src.dir}" destdir="${build}/classes" nowarn="on">
<classpath refid="project.classpath" />
</javac>
</target>
<target name="makeWar" depends="compile">
<delete file="${build}${path}.war"/>
<war destfile="${build}${path}.war" webxml="WebContent/WEB-INF/web.xml">
<fileset dir="WebContent" />
<lib dir="WebContent/WEB-INF/lib" />
<classes dir="build/classes" />
</war>
</target>
<target name="deploy" description="Install web application" depends="makeWar" >
<deploy url="${url}" username="${username}" password="${password}" path="${path}" war="${build}${path}.war" />
</target>
而且我也在我的 tomcat-users.xml 文件中关注:
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<role rolename="manager-script"/>
<user username="manager" password="tomcat" roles="manager-gui"/>
<user username="admin" password="tomcat" roles="admin-gui"/>
<user username="gbids" password="tomcat" roles="manager-script"/>
任何人都可以帮我解决这个问题。
谢谢
我找到了解决方案。我试图根据Tomcat文档中给出的准则来完成这项任务。据此,他们只要求将" catalina-ant.jar"文件复制到ant lib目录。
但是,一旦我复制了'tomcat-coyote.jar','tomcat-juli.jar','tomcat-util.jar'文件中的文件添加到蚂蚁的 lib 目录中ant.jar'文件它对我很完美。
您需要对<taskdef>
S更聪明:
<property name="catalina.home" value="/path/to/tomcat" />
<path id="tomcat.classpath">
<fileset dir="${catalina.home}" includes="lib/*.jar" />
</path>
.
.
.
<taskdef name="deploy"
classname="org.apache.catalina.ant.DeployTask"
classpathref="tomcat.classpath" />
您在项目的WEB-INF/lib
目录中不应有任何Tomcat的JAR文件:删除它们。
最后,从ANT获取更多信息很容易:运行ant --help
以查看您拥有的调试选项。
这听起来像是运行时错误。缺少的课程是" tomcat-coyote.jar"的一部分,您确定它已正确复制到战争文件中吗?
检查战争文件内容如下:
unzip -t myapp.war | more
罐子都应位于" Web-Inf/lib"目录下。在其他任何地方都意味着它们不包括在类路径上,并且会解释此错误