• ベストアンサー

jarのパス

実行、自身のクラスが含まれたjarファイルのパスを取得する方法はありますでしょうか? /usr/local/lib/hello.jar の hello.class 実行中に、 "/usr/local/lib"というパス文字列を取りたい。 また、自身のjarに含まれるマニフェストファイルを取得する方法はありますでしょうか? JarInputStream で jar を読み込み、getManifest で取得できますが、上記のように自身のjarの位置を調べるか、直接自身のマニフェストファイルを読み込める方法を探しております。

質問者が選んだベストアンサー

  • ベストアンサー
  • ggaogg
  • ベストアンサー率43% (38/88)
回答No.1

Classクラスの、getResource(String)やgetResourceAsStream(String)等で、そのクラスからの相対的な場所のリソースを得られます。 たとえば、helloというクラスと同じディレクトリにあるresource.txtの場所を求めたい場合は、 Class helloClass = hello.class; helloClass.getResource("./resource.txt"); このようにします。 /usr/local/lib/hello.jarからの相対的に/usr/local/libを求めるには、パッケージ階層にもよりますが、"../../.."等を指定すればいいと思います。 ただ、私もjarで固めた状態で試したことがないので、本当にできたかどうか、締め切る前に結果を教えて頂けるとうれしいです。

mozori01
質問者

お礼

お礼が遅くなり申し訳ありません。 結果、getResourceの指定で、"./"や"../"が使えず、 自身のクラス以下の階層しかアクセスできませんでした。 Manifest.MFがhelloクラスよりも上の階層のディレクトリにあったため、直接Manifestの取得は諦めました。 自身のクラスのURLからjarのパスを抜き出し、jarストリームからgetManifestすることにより解決しました。 アドバイスありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • auty
  • ベストアンサー率58% (284/486)
回答No.2

おそらく    /usr/local/lib は任意ですから、実行時のパラメータとして明示すれば、最初のクラスでは取得できます。 (格好はよくないかも。)    java -jar /usr/local/lib/最初のクラス名を含むjarファイル /usr/local/lib/ 最初のクラスのargs[0]に入ります。他のクラスでは、わかりません。

mozori01
質問者

お礼

パラメータを渡せない状況でも、動的に動作する方法を探しておりました。 お礼が遅くなって申し訳ございません。 アドバイスありがとうございました。

すると、全ての回答が全文表示されます。