0

ant 1.8.1 を使用して Java コンパイルを実行しようとしていました。要件により、ループ内で多数の Java ソース フォルダー (Java ファイルを含む) をコンパイルする必要があります。これらのフォルダ名は、プロパティ ファイルに記載されている Java プロジェクトから派生します。ループ自体から、Java コンパイルを実行する必要があります。そこで、Java ソースのコンパイルに必要なすべてのパラメーターを渡すマクロ定義を使用しました。基本的に、build_Compile.xml を呼び出しているメインの build.xml ファイルがあります (これの責任は、ビルドする Java プロジェクトとそれに対応するソース フォルダーを特定し、各プロジェクトのループでコンパイルを実行することです)。これを実現するために、多数のマクロ定義を含むヘルパー ファイル (Helper.xml) ファイルで定義されたマクロ定義を使用します。

ただし、タスクを実行すると、java src パス (パラメーターとして渡される) が正しく見つからないことを示すエラーが表示されます。私が気付いたのは、ビルド ファイルのパス (すべての build*.xml ファイルが存在する場所) が Java src ディレクトリ パス (マクロ定義でパラメーターとして渡される) の前に追加されていることです。期待どおりに見えるマクロ定義に渡されるパラメーターを出力しました。これは私がJavaソースのコンパイルに使用しているスニペットです -

…………

    <javac  srcdir="@{srcpath}" 
            destdir="./Temp/build/classes/" 
            includeAntRuntime="false" 
            classpath="${classpath}" 
            includes="${replacedartefacts}">
    </javac>

話が長くなってすみません。ポインタ/ガイドラインに感謝します。ありがとう。

4

1 に答える 1

1

ループのアイデアに少し混乱しています。これについて私が考えることができる2つの方法があります:

  • 単一のプロジェクトがありますが、プロジェクトに応じて異なるソース ディレクトリをコンパイルします。
  • コンパイルするソース フォルダーを含む一連のサブ プロジェクトを呼び出すマスターbuild.xmlがあります。

最初の例では、各<javac>呼び出しは既にコンパイルされたクラスファイルに依存しています。2 番目のシナリオでは、コンパイルする Java ソースの各セットは残りの部分から独立しています。

取得しているエラーや、その値@{srcdir}が役立つことはありません。

includesパラメータがあることに気づきました。これは、含める Java ファイルのリストです。また、これがプロパティであることにも気付きました。つまり、一度設定すると変更できません。includeパラメータがあるのなぜですか? すべてのプロジェクト用にコンパイルする特定のファイルのセットを指定すると、実行したいことにどのように影響しますか。これは次のような値*.javaですか?これは、コンパイルしているソース ディレクトリの各セットで同じになるものですか?

これは${basedir}物件の問題でしょうか?<ant>またはを使用すると、呼び出されたプログラムのではなく、呼び出し元のプログラムの に設定され<import>ます。${basedir}${basedir}${basedir}

パラメータを指定して Ant を実行し-dます。これにより、何百行もの出力が生成されますが、 への各呼び出しで何が起こっているかが正確に示され<javac>ます。正確なエラー メッセージと、プロジェクトの設定方法に関するもう少し詳しい情報を投稿していただければ、さらにサポートを提供できます。

ループについて言えば、Ant-Contribタスク、特にforタスクを見てください。Ant subantタスクも調べてください。この<for>タスクにより、一連のディレクトリ パラメーターを簡単にループする方法が提供されます。タスクは、<subant>サブプロジェクトを構築するマスター ビルド用に作成されます。

于 2012-10-22T04:05:36.367 に答える