2012-12-27 69 views
3

我正在嘗試部署由一個Web Servlet和JSP組成的簡單Web應用程序。我沒有使用任何框架,如Spring或任何,只是一個helloWorld網絡應用程序。使用Ant將簡單的Web應用程序部署到Tomcat中

我使用Ant來進行部署。但是,當我跑我的部署目標它給了我:

java.lang.NoClassDefFoundError: org/apache/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"/> 

任何人都可以請幫助我解決這個問題。

謝謝

+0

請發佈異常的完整堆棧跟蹤。 –

+0

它沒有給我一個堆棧跟蹤。只是在螞蟻控制檯的例外。 deploy: BUILD FAILED C:\ Users \ Buddhi \ workspace-indigo \ AntTestDeploy \ build.xml:52:java.lang。NoClassDefFoundError:org/apache/tomcat/util/buf/B2CConverter 總時間:1秒 – gbids

回答

1

你需要更聰明的你<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" /> 

你不應該有任何的Tomcat的JAR文件在項目的WEB-INF/lib目錄:將它們全部刪除。

最後,從螞蟻獲取更多信息很簡單:運行ant --help以查看您有哪些調試選項。

+0

我試過這種方式,它似乎正確地檢測到我的tomcat的lib目錄中的所有jar文件(因爲在eclipse中它顯示我所有的jar文件當我將鼠標懸停在螞蟻窗口中的路徑id元素上時,在該工具提示文本中的lib目錄中)但是當我運行這個時,ant說它仍然需要'tomcat-juli.jar'和'tomcat-util.jar'文件。 (當我從Tomcat的lib目錄中將這些jar文件複製到ant的lib目錄時,它正常工作。) – gbids

+0

'tomcat-juli.jar'文件不在tomcat的lib目錄中,但仍然顯示它找不到'tomcat-util.jar 'jar文件。 – gbids

+0

這裏是代碼.. '\t \t \t \t <文件集DIR =」 $ {的catalina.home}/LIB 「> \t \t \t <包括名稱=」 **/*。罐子」 /> \t \t \t \t < taskdef name =「deploy」classname =「org.apache.catalina.ant.DeployTask」> \t \t \t' – gbids

0

這聽起來像是一個運行時錯誤。缺少的班級是「tomcat-coyote.jar」的一部分,你確定它已被正確複製到你的戰爭檔案中嗎?

檢查WAR文件內容如下:

unzip -t myapp.war | more 

的罐子都應該在 「WEB-INF/lib」 目錄下的位置。其他任何地方都意味着它們不包含在類路徑中,並將解釋此錯誤

3

我找到了解決方案。我試圖根據Tomcat文檔中給出的指導來完成這項任務。據他們說,他們只要將'catalina-ant.jar'文件複製到Ant lib目錄。

但是,一旦我抄 '的tomcat-coyote.jar', 'Tomcat的juli.jar',爲 'tomcat-util.jar' 文件到Ant的的lib目錄連同 '卡塔利娜-的ant.jar'文件它爲我完美工作。

相關問題