3

1つのWebサーブレットとJSPで構成される単純なWebアプリケーションをデプロイしようとしています。Springなどのフレームワークは使用していません。helloWorldWebアプリだけを使用しています。

展開の目的でAntを使用しています。しかし、デプロイターゲットを実行すると、次のようになります。

java.lang.NoClassDefFoundError:org / apache / tomcat / util / buf / B2CConverter

私はTomcat7を使用しており、Tomcatlibディレクトリと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"/>

誰かがこの問題を解決するのを手伝ってくれませんか。

ありがとう

4

3 に答える 3

3

解決策を見つけました。Tomcatのドキュメントに記載されているガイドラインに従って、そのタスクを実行しようとしていました。それによると、彼らは「catalina-ant.jar」ファイルをAnt libディレクトリにコピーすることだけを求めています。

しかし、「tomcat-coyote.jar」、「tomcat-juli.jar」、「tomcat-util.jar」ファイルを「catalina -ant.jar」ファイルとともにAntのlibディレクトリにコピーすると、完全に機能しました.

于 2012-12-28T14:37:49.090 に答える
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して、使用できるデバッグ オプションを確認します。

于 2012-12-28T14:38:58.947 に答える
0

これはランタイムエラーのように聞こえます。欠落しているクラスは「tomcat-coyote.jar」の一部です。warファイルに正しくコピーされていますか?

wARファイルの内容を次のように確認します。

unzip -t myapp.war | more

jarファイルはすべて「WEB-INF/lib」ディレクトリの下に配置する必要があります。それ以外の場所は、それらがクラスパスに含まれていないことを意味し、このエラーを説明します

于 2012-12-28T11:12:04.207 に答える