1

現在、.class ファイルとして配布されている多数の外部ライブラリ (具体的には apache.hwpf および JDom2) を使用する ant を使用してプロジェクトをコンパイルしようとしています。

私は現在、プロジェクトの編集とビルドに Eclipse を使用していますが、ant ファイルの使用に切り替えたいと思います。これは、保守が容易であり (特定のバージョンの Eclipse は必要ありません)、ビルドが容易であるためです。 (「ant build」などを実行するだけです。

問題は、ant ファイルのどこにライブラリを含めるべきかわからないことです。私の現在の ant ファイル (以下を参照) は常に javac の段階で失敗するので、そこにあるはずだと思います。これは一般的に、JDom2 ライブラリーによって定義されたクラスである「Element」などを見つけることができないためです。

誰かがそれをどこに、どのようにインポートする必要があるかを説明できますか?

(編集: 補遺として、私が取得しようとしている機能は、Eclipse のプロジェクト プロパティのビルド パスの [ライブラリ] タブの下にクラス フォルダーを追加することに似ています。これは現在、私のプロジェクトをビルドするために機能しますが、移動したいと思います可能であれば日食から離れてください。)

(編集:さらなる明確化;プロジェクト->プロパティ-> Javaビルドパス->ライブラリ->クラスフォルダーの追加を実行してEclipseで行うことは、antを使用して実行できるようにしたいです。)

これまでの私のantスクリプトは次のとおりです。

<project>
    <property name="src.dir" value="src"/>
    <property name="lib.dir" value="lib"/>
    <property name="build.dir" value="build"/>
    <property name="classes.dir" value="${build.dir}/classes"/>
    <property name="jar.dir" value="${build.dir}/jar"/>
    <property name="main-class" value="ba_cc.Main"/>

    <target name="clean">
        <delete dir="${build.dir}"/>
    </target>

    <target name="compile">
        <mkdir dir="${classes.dir}"/>
        <javac srcdir="${src.dir}" destdir="${classes.dir}"/>
    </target>

    <target name="jar">
        <mkdir dir="${jar.dir}"/>
        <jar destfile="${jar.dir}/Change_Checker.jar" basedir="${classes.dir}">
            <manifest>
                <attribute name="Main-Class" value="${main-class}"/>
            </manifest>
        </jar>
    </target>

    <target name="run">
        <java jar="${jar.dir}/Change_Checker.jar" fork="true"/>
    </target>

    <target name="clean-build" depends="clean,compile,jar"/>

    <target name="main" depends="clean,run"/>
</project>
4

1 に答える 1

2

Ant ビルドのjavacタスクは、サードパーティ クラスをまったく参照していません。これに対処するには、クラスパスでそれらを具体的に参照する必要があります。これを処理する最善の方法は、プロパティを設定し、タスクのor属性をproject.class.path使用してそのプロパティを参照することです。classpathclasspathrefjavac

ここに例がありproject.class.pathます。lib.dirにはサードパーティの jar またはクラスが含まれると仮定しています。

<path id="project.class.path">
  <fileset dir="${lib.dir}"/>
  <pathelement location="${src.dir}"/>
  <pathelement location="${classes.dir}"/>
</path>

別の方法として、より多くのpathelement属性を使用して個別の jar ファイルを提供することもできます。

<path id="project.class.path">
  <pathelement location="${lib.dir}/JDom2.jar"/>
  <pathelement location="${lib.dir}/AnotherSupportLibrary.jar"/>
  ...

今、あなたのcompileタスクで:

<target name="compile">
    <mkdir dir="${classes.dir}"/>
    <javac srcdir="${src.dir}" destdir="${classes.dir}"
           classpath="${project.class.path}"/>
</target>

ここで、ビルドする jar にサードパーティ ライブラリも含める必要があります。このjarタスクには、サポート jar の内容を構築中の jar にマージするための規定があります。jar タスクのドキュメントのアーカイブのマージに関する説明を参照してください。

また、ドキュメンテーションを読み、javac タスクの例を注意深く調べ、 Writing a Simple Buildfileも調べてください。最後に、より複雑なクラスパスの設定については、Directory-based Tasksのドキュメンテーションを調べてください。

于 2012-09-04T14:09:18.427 に答える