mavenでjarを作成する際に、下記のようなカスタマイズを行うことは可能でしょうか?

・特定のリソースファイルがjar内に含まれないようにする。
・MANIFEST.MFファイルの記述に任意のクラスパスを含める。

[背景]
s2jdbcを利用しているmavenプロジェクトからjarを作成します。
その際DB接続設定を持つjdbc.diconをjarの外に出したいと考えています。
※プロジェクトにおいては「src/main/resources」配下に各種diconファイル(jdbc.dicon含む)を配置しています。

jdbc.diconはクラスパスの通っているディレクトリに配置すれば参照されるらしいので、下記が達成されればそれが可能になると考えました。
・jarファイル内にjdbc.diconが出力されないようにする
・MANIFEST.MFのクラスパスに、jarからの相対パス(「conf/」など)でjdbc.diconを配置するフォルダへのパスを追加する

この方針以外であっても、今回のような状況下でjdbc.diconをjarから外出しする方法があればご回答頂ければと思います。
よろしくお願い致します。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/10/21 11:19:13
  • 終了:2012/10/21 15:58:58

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4504ベストアンサー獲得回数18702012/10/21 12:22:35

ポイント100pt

<excludes> を使います。
http://maven.apache.org/plugins/maven-resources-plugin/examples/include-exclude.html
http://maven.apache.org/pom.html#Resources

例えば、こんな感じ。

<project>
  <build>
    ...
    <resources>
      <resource>
        <directory>【対象のディレクトリ】</directory>
        <includes>
          <include>*</include>
        </includes>
        <excludes>    <!-- ★ここ! -->
          <exclude>**/jdbc.dicon</exclude>
        </excludes>
      </resource>
    </resources>
  </build>
</project>

jdbc.dicon を配置している場所がはっきりしているなら、** じゃなくて、きちっと指定した方が良いと思います。


クラスパスは、<archive> の <manifest> で指定することになります。
本家のドキュメント よりも、こちらの方が分かりやすいかも。
http://d.hatena.ne.jp/clash_m45/20120616/1339871432

「依存関係」については、本家の方で。
http://maven.apache.org/pom.html#Dependencies

こんな感じになるのかな...

  <dependencies>
    <dependency>
      ...
      <artifactId>jdbc</artifactId>
      <type>dicon</type>
      ...
    </dependency>
  </dependencies>
id:k1q84

早速ご回答ありがとうございます。
> 特定のリソースファイルがjar内に含まれないようにする。
こちらはこれで解決しました!

> MANIFEST.MFファイルの記述に任意のクラスパスを含める。
こちらについては引き続き解答を募集します。
よろしくお願い致します!

2012/10/21 13:24:47
id:k1q84

>a-kuma3さん
すみません!後半の記述(クラスパスは~)を見落としていました・・・。
記述内容を確認したのですが、依存関係はmavenリポジトリに登録されているコンポーネントを取り込むために指定するものだと思うので、今回のように単に「クラスパスに外部ディレクトリ(外部設定ファイル)へのパスを追加したい」というので指定するものではないと思います。
(maven経験浅いので、間違っているかもしれませんが。。)

しかしご紹介頂いたサイトを確認する中で、今回自分が実現したいことは<manifest>タグ内ではできなさそうだということ、及び、<manifestEntries>タグを併用すれば実現できそうだということがわかりました。

それで下記のサイトに行き当たり、クラスパスについても解決しました。
http://stackoverflow.com/questions/1510071/maven-how-can-i-add-an-arbitrary-classpath-entry-to-a-jar

<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addClasspath>true</addClasspath>
<mainClass>your.main.Class</mainClass>
</manifest>
<manifestEntries>
<Class-Path>../conf/</Class-Path>
</manifestEntries>
</archive>


ありがとうございました!

2012/10/21 15:53:47

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません