web-dev-qa-db-ja.com

Antを使用して非コードリソースをjarファイルに追加する

Javaアプリケーションをjarファイルにパッケージ化しています。antとEclipseを使用しています。実際には、いくつかの個別の非コードファイル(xml)をjarに含める必要があります。およびtxtファイル)は、コードと同じ場所ではなく、ルートフォルダーのすぐ下にあります。

Includefileを使おうとしていますが、うまくいかないようです。これが私のantターゲットです。

<target name="distribute" depends="compile" includesfile="readthis.txt">
    <jar destfile="${distributionDir}/myjar.jar" >
        <fileset dir="${outputDir}"/>
    <fileset dir="${sourceDir}"/>           
    </jar>
</target>

Includefile引数を省略した場合、上記は正常に機能します。さらに、複数の非コードファイルを追加する必要があります。これらのファイルは、Eclipseのルートプロジェクトフォルダーの直下にあり、Javaパッケージ内にはありません。

また、上で見ることができるように、私は基本的にjarに私のソースコードも含めています。コンパイルされたコードとは別のフォルダーにソースコードを配置するようにjarタスクに指示する方法はありますか?

コンパイルまたはビルドタスクとして、Antはコンパイルされたクラスからソースコードを簡単に分離できます。しかし、jarファイル内でもそれを行う方法はありますか?

お時間をいただき、ありがとうございました!

22
denchr

そもそもtargetincludesfile属性を含めるべきではありません。とにかくそのポイントを誤解しているのではないかと思います。includesfileで指定するファイルには、ファイルのパターンが含まれているという考えです。 Antファイルに入れたくない場合は、含める必要があります。

必要なのは、必要な適切なファイルを含む追加のファイルセットだけだと思います。たとえば、readthis.txt

<target name="distribute" depends="compile">
  <jar destfile="${distributionDir}/myjar.jar" >
    <fileset dir="${outputDir}"/>
    <fileset dir="${sourceDir}"/>
    <fileset file="readthis.txt" />
  </jar>
</target>

また、次のことができるように、リソース用の新しいディレクトリを作成することをお勧めします。

<target name="distribute" depends="compile">
  <jar destfile="${distributionDir}/myjar.jar" >
    <fileset dir="${outputDir}"/>
    <fileset dir="${sourceDir}"/>
    <fileset dir="${resourcesDir}" />
  </jar>
</target>

手間をかけずに。これにより、ディレクトリ構造がクリーンに保たれ、上から下に向かって物を見つけやすくなります。

38
Jon Skeet