使用Ant将简单的Web应用程序部署到Tomcat

时间:2012-12-27 13:52:09

标签: tomcat deployment ant

我正在尝试部署我的简单Web应用程序,该应用程序由一个Web servlet和一个JSP组成。我没有使用任何框架,如Spring或任何东西,只是一个 helloWorld 网络应用程序。

我正在使用Ant进行部署。但是,当我运行部署目标时,它会给我:

  

java.lang.NoClassDefFoundError:   组织/阿帕奇/ Tomcat的/ util的/ BUF / B2CConverter

我正在使用Tomcat 7,我已将Tomcat lib目录下的所有库和 tomcat-juli.jar 包含在我的webcontent/web-inf/lib中。

我的Ant文件目标如下:

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

任何人都可以帮我解决这个问题。

由于

3 个答案:

答案 0 :(得分:3)

我找到了解决方案。我试图根据Tomcat文档中给出的指导来完成这项任务。据他们说,他们只要求'catalina-ant.jar'文件复制到Ant lib目录。

但是,一旦我将'tomcat-coyote.jar','tomcat-juli.jar','tomcat-util.jar'文件与'catalina-一起复制到Ant的 lib 目录中ant.jar'文件它对我来说很完美。

答案 1 :(得分:1)

您需要更明智地了解<taskdef>

<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以查看您拥有的调试选项。

答案 2 :(得分:0)

这听起来像是运行时错误。缺少的类是“tomcat-coyote.jar”的一部分,您确定它已被正确复制到您的war文件中吗?

按如下方式检查wAR文件内容:

unzip -t myapp.war | more

罐子应该都位于“WEB-INF / lib”目录下。其他地方意味着它们不包含在类路径中并会解释此错误