7

ソース フォルダーをコンパイルするための ant ビルドを作成しようとしています。ここにコンパイルのスクリプトターゲットがあります。

 <target name="compile" depends="init">
        <javac srcdir="${src.dir}" destdir="${classes.dir}" debug="true">
            <classpath refid="master-classpath"/>
        </javac>

    </target>

私のプロジェクトには、約 1000 個の.javaファイルがあります。単一の.javaファイルがターゲットを超えて変更されると、すべてのファイルがコンパイルされる傾向があり.javaます。これにより、開発が非常に遅くなります。.javaすべてのファイルではなく、変更または変更されたファイルのみをコンパイルするようにタスクの動作を変更する方法またはコードがあることを知りたいだけ.javaです。

私を助けてください。

4

2 に答える 2

11

私が理解しているように、変更された Java ファイルのみをコンパイルすることは、ant javac タスクのデフォルトの動作です。Ant は、.java ファイルとそれに対応する .class ファイルのタイムスタンプを使用して、Java ファイルを再コンパイルする必要があるかどうかを判断します。私は多くのプロジェクトでそれを使用してきましたが、問題はありません。

ここにあなたがチェックできるいくつかのことがあります

  1. ソース ツリーのディレクトリ構造は、Java パッケージの構造と一致していますか? ant が常にすべての Java ファイルを再コンパイルするのはなぜですか?を参照してください。. FAQにあるので、これがおそらく一番の理由です。

  2. あなたのcompileターゲットはターゲットによって異なりますinitか?ターゲットは何をしinitますか?ターゲットに依存しcleanますか、それとも .class ファイルをクリーンアップしますか?

  3. あなたのアリのバージョンは何ですか?別の ant バージョンを試して、まだ同じ問題が発生するかどうかを確認できますか?

  4. 上記のいずれでも問題が解決しない場合、コンパイル後に .class ファイルのタイムスタンプを手動で確認し、対応する .java ファイルのタイムスタンプと比較できますか?

于 2013-02-28T06:52:25.720 に答える
1

そのため、依存タスクでクラス ディレクトリを削除しない場合、「クリーン」と言うと、javac タスクは本質的に変更された Java ファイルのみをコンパイルします。これは、javac タスクが提供するすぐに使える機能です。それが役に立てば幸い。

于 2016-01-03T12:01:21.470 に答える