2

現在、次のbuild.xmlがあります。

<project name="Bccn" default="help" basedir=".">
<!-- Define the properties used by the build -->
<property name="app.name" value="bccn" />
<property name="app.version" value="0.1-dev" />
<property name="tcserver.home" value="/home/abhishek/tomcat" />
<property name="work.home" value="${basedir}/work" />
<property name="dist.home" value="${basedir}/dist" />
<property name="src.home" value="${basedir}/src" />
<property name="web.home" value="${basedir}/web" />
<property name="lib.dir" value="${basedir}/lib" />

<target name="help">
    <echo>You can use the following targets:</echo>
    <echo>
    </echo>
    <echo>  help    : (default) Prints this message </echo>
    <echo>  all     : Cleans, compiles, and packages application</echo>
    <echo>  clean   : Deletes work directories</echo>
    <echo>  compile : Compiles servlets into class files</echo>
    <echo>  dist    : Packages artifacts into a deployable WAR</echo>
    <echo>
    </echo>
    <echo>For example, to clean, compile, and package all at once, run:</echo>
    <echo>prompt> ant all </echo>
</target>

<!-- Define the CLASSPATH -->
<path id="compile.classpath">
    <fileset dir="${tcserver.home}/bin">
        <include name="*.jar" />
    </fileset>
    <pathelement location="${tcserver.home}/lib" />
    <fileset dir="${tcserver.home}/lib">
        <include name="*.jar" />
    </fileset>
</path>

<target name="all" depends="clean,compile,dist" description="Clean work dirs, then compile and create a WAR" />

<target name="clean" description="Delete old work and dist directories">
    <delete dir="${work.home}" />
    <delete dir="${dist.home}" />
</target>

<target name="prepare" depends="clean" description="Create working dirs and copy static files to work dir">
    <mkdir dir="${dist.home}" />
    <mkdir dir="${work.home}/WEB-INF/classes" />
    <!-- Copy static HTML and JSP files to work dir -->
    <copy todir="${work.home}">
        <fileset dir="${web.home}" />
    </copy>
</target>

<target name="compile" depends="prepare" description="Compile Java sources and copy to WEB-INF/classes dir">
    <javac srcdir="${src.home}" destdir="${work.home}/WEB-INF/classes">
        <classpath refid="compile.classpath" />
    </javac>

    <copy todir="${work.home}/WEB-INF/classes">
        <fileset dir="${src.home}" excludes="**/*.java" />
    </copy>

</target>


<target name="dist" depends="compile" description="Create WAR file for binary distribution">
    <jar jarfile="${dist.home}/${app.name}-${app.version}.war" basedir="${work.home}" />

</target>

今、ローカルの依存関係として log4j を含め、.war ファイルを作成するときにそれを含めたいと考えています。ただし、ANT は依存関係を見つけることができません。それを機能させる方法はありますか?基本的な質問で申し訳ありませんが、私は初心者です。

更新(そして、私がすでに得た助けに感謝します):

「戦争」を追加したくなかったので、build.xml を次のように変更しました。

<target name="help">
    <echo>You can use the following targets:</echo>
    <echo>
    </echo>
    <echo>  help    : (default) Prints this message </echo>
    <echo>  all     : Cleans, compiles, and packages application</echo>
    <echo>  clean   : Deletes work directories</echo>
    <echo>  compile : Compiles servlets into class files</echo>
    <echo>  dist    : Packages artifacts into a deployable WAR</echo>
    <echo>
    </echo>
    <echo>For example, to clean, compile, and package all at once, run:</echo>
    <echo>prompt> ant all </echo>
</target>

<!-- Define the CLASSPATH -->
<path id="compile.classpath">
    <fileset dir="${tcserver.home}/bin">
        <include name="*.jar" />
    </fileset>
    <pathelement location="${tcserver.home}/lib" />
    <fileset dir="${tcserver.home}/lib">
        <include name="*.jar" />
    </fileset>
    <fileset dir="${lib.dir}">
        <include name="*.jar" />
    </fileset>
</path>

<target name="all" depends="clean,compile,dist" description="Clean work dirs, then compile and create a WAR" />

<target name="clean" description="Delete old work and dist directories">
    <delete dir="${work.home}" />
    <delete dir="${dist.home}" />
</target>

<target name="prepare" depends="clean" description="Create working dirs and copy static files to work dir">
    <mkdir dir="${dist.home}" />
    <mkdir dir="${work.home}/WEB-INF/classes" />
    <!-- Copy static HTML and JSP files to work dir -->
    <copy todir="${work.home}">
        <fileset dir="${web.home}" />
    </copy>

</target>

<target name="compile" depends="prepare" description="Compile Java sources and copy to WEB-INF/classes dir">
    <javac srcdir="${src.home}" destdir="${work.home}/WEB-INF/classes">
        <classpath refid="compile.classpath" />
    </javac>

    <copy todir="${work.home}/WEB-INF/classes">
        <fileset dir="${src.home}" excludes="**/*.java" />
        <fileset dir="${lib.dir}" includes="*.jar" />
    </copy>

</target>


<target name="dist" depends="compile" description="Create WAR file for binary distribution">
    <jar jarfile="${dist.home}/${app.name}-${app.version}.war" basedir="${work.home}" />

</target>

これで、ANT は依存関係を見つけてコンパイルできます。ただし、Tomcat サーバーにデプロイすると、依存関係のファイルに失敗します。依存関係をパッケージ化してTomcatにも表示できるようにする方法について、いくつかのアイデアを提供していただけますか?

4

1 に答える 1

0

代わりにwar タスクを使用する必要があります。

<war destfile="${warname}" webxml="war/WEB-INF/web.xml">
    <fileset dir="${work.home}"/>
    <lib dir="${lib.dir}/" includes="log4j.jar"/>
    <classes dir = "${CLASSES}" />
</war>

war ファイルに含まれる依存関係の jar ファイルを検索し、web.xml フォルダーへのパスを指定するように構成できます。.class ファイルを war フォルダーの宛先にコピーするべきではありません。war タスクに任せてください。

于 2013-08-07T21:52:04.507 に答える