com.me.X.jarでプログラムを実行しています。
外部のcom.me.Y.jarには、Jar のルートにある「 config/conf.txt 」に構成ファイルがあります。
Java 内からプログラムでこの構成ファイルにアクセスするにはどうすればよいですか?
com.me.Y.jarは現在メモリーにロードされておらず、コード以外のリソースのみで構成されています。
com.me.X.jarでプログラムを実行しています。
外部のcom.me.Y.jarには、Jar のルートにある「 config/conf.txt 」に構成ファイルがあります。
Java 内からプログラムでこの構成ファイルにアクセスするにはどうすればよいですか?
com.me.Y.jarは現在メモリーにロードされておらず、コード以外のリソースのみで構成されています。
jar ファイルは単なる zip ファイルです。zipファイルを読む方法の例については、Googleで検索してください。または API ZipInputStreamを見てください
埋め込みリソースを読み取るための最も簡単なオプションは、Class.getResource
またはを使用することですClass.getResourceAsStream
あなたのニーズに応じて、これを達成するためのいくつかの方法を考えることができます。
com.me.Y.jar
をクラスパスに追加します。これは、システム レベル (あまりお勧めしません) またはコマンド ラインで行うことができます...
java -cp com.me.Y.jar -jar com.me.X.jar
編集上記のコマンドを使用する と、明らかに-cp
引数が無視されることが指摘されていますが、メインクラスを含めると機能します... java -cp com.me.Y.jar -jar com.me.X.jar com.me.x.Main
(たとえば)
それが不便な場合は、自動的に含まれるcom.me.Y.jar
マニフェストcom.me.X.jar
のクラスパスに追加できcom.me.Y.jar
ます。
それができない場合は、 a を使用しURLClassLoader
て直接ロードできますcom.me.Y.jar
...
URL[] urls = new URL[]{new File("/path/to/com.me.Y.jar").toURI().toURL())};
URLClassLoader classLoader = new URLClassLoader(urls);
URL resource = classLoader.findResource("/config/conf.txt");
または、必要に応じて、単に を使用して瓶を割ることもできますが、java.util.JarFile
それは核でクルミを割るように思えます...私見
URL configURL = this.getClass().getResource("/config/conf.txt");
Manifest.mf
のcom.me.X.jar
JAR ファイルのクラスパスへのクラスの追加を参照してください。
Main-Class: ...
Class-Path: com.me.Y.jar