web-dev-qa-db-ja.com

Antコンパイルはリソースをコピーしません

私は自分のbuild.xmlを作成しました:

<target name="compile">
    <mkdir dir="build"/> 
    <javac destdir="build"> 
        <src path="src"/> 
    </javac>
</target>

<target name="build" depends="compile">
    <mkdir dir="dist"/>
    <jar destfile="dist/app.jar" basedir="build" />
</target>

<target name="run" depends="compile">
    <Java classname="webserver.Loader" classpath="build" fork="true" />      
</target>

それは素晴らしい働きをします。 ant runを呼び出すと、アプリケーションがコンパイルされて実行されますが、アプリケーションにはアイコン付きのパッケージがあり、「ビルド」フォルダーに移動されないため、アイコンが見つからないという例外でアプリケーションが終了します。自分で動かすとうまくいきます。

使ってみた

<copy todir="build/app/icons">
    <fileset dir="src/app/icons"/>
</copy>

動作しますが、copyコマンドなしで実行したいと思います。 javacにパラメーターはありますか?または、他の何か?

答えてくれてありがとう。

37
Tomáš Linhart

申し訳ありませんが、Java以外のファイルを手動でコピーする必要があります。リソースは技術的には「ソース」ではありません。コマンドラインjavacは、ソースディレクトリから出力ディレクトリにリソースファイルをコピーしません。また、antのjavacタスクもコピーしません。

24
Mike Miller

そのようなパラメーターはありません。あなたはあなたのディレクトリ間であらゆる種類のファイルをコピーすることができます:

<copy todir="build">
    <fileset dir="src"
             includes="**/*.xml,**/*.properties,**/*.txt,**/*.ico" />
</copy>
47
Chris Winters

これを行うには、ファイルを手動でコピーする代わりに、filesetタスクのjar要素を使用します。例えば:

<jar destfile="dist/app.jar" basedir="build">
    <fileset dir="src" includes="app/icons/**" />
</jar>

これにより、src/app/icons/からapp/icons .jarファイル内のパス。

13
David Hopkins

いいえ、ありません。コピータスクは、リソースをビルドフォルダーにコピーする正しい方法です。

4
jsight