3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Javaで設定ファイル、クラスがロードされる順番を指定する

Posted at

解決したい問題

  • WARを実行するときに、訳あってクラスパス上に同名の設定ファイルが複数存在する場合に、ロードされる順番を指定したい
  • 環境はWebSphere Liberty、Java8を想定
  • 設定ファイル、クラスをクラスパスに含める方法として単純なものは以下の3種類がある。この3つの優先順位を確認したい
    • WARファイルに含める
    • JARファイルに含め、WARファイルのWEB-INF/libに配置する
    • WAR外部に配置する(Libertyのserver.xmlで<library>に指定する)

調査した結果

以下の順番となった。1と2はパッケージングの方法や環境依存ファイルの配置の都合上、自由に設定しにくいのでロード順を細かく指定したい場合は、WARの外部にJARを配置する形をとり、さらに<library>のなかで細かく順序を指定するのが良さそう。

  1. WARファイルに含める
  2. JARファイルに含め、WARファイルのWEB-INF/libに配置する
  3. WAR外部に配置する(Libertyのserver.xmlで<library>に指定する)

具体的にはこのような形となる。<library>の子要素の指定順がクラスロードの順番となる。<file>だけでなく<folder>で指定する場合もXML要素の順番がクラスロードの順番となる。

<library id="mydir">
  <file name="/mydir/foo1.jar"/>
  <file name="/mydir/foo2.jar"/>
</library>

<webApplication location="/dir/bar.war">
  <classloader privateLibraryRef="mydir"/>
</webApplication>

よくわからなかったこと

MANIFEST.MFのClass-Path指定でも同様の設定ができるのではないかと思えるのだが、WARに含めたMANIFEST.MFのClass-Pathで指定した場合、なぜかクラスロードの対象にならないようだった。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?