JAR ファイルからのリソースのロード
アプリケーションでは、WinProcessor.class.getResource("repository") を使用してリソースをロードしています。 toString()。IDE から実行する場合はファイル パスを提供しますが、JAR ファイルとして実行する場合は JAR URL を返します。この不一致は、JAR ファイルに圧縮およびパッケージ化された形式のリソースが含まれているために発生します。
JAR へのリソースのロードについて
アプリケーションを JAR ファイルにパッケージ化すると、その内容がリソースを含むファイルはアーカイブ内に保存されます。 JAR ファイル内からリソースにアクセスしようとすると、JVM はそのリソースをファイル システム内のファイルとは異なる方法で扱います。 getResource メソッドは、JAR 内のリソースの場所を指す URL を返します。
解決策: getResourceAsStream を使用する
この問題を解決するには、getResourceAsStream の代わりに getResourceAsStream を使用することをお勧めします。リソースを取得します。 getResourceAsStream は、JAR ファイルからリソースの内容を直接読み取ることができるようにする InputStream を返します。次に、InputStream を使用して、ConfigurationContext などの必要なオブジェクトを作成したり、システム プロパティを設定したりできます。
getResourceAsStream を使用した更新された例を次に示します。
InputStream repositoryInputStream = WinProcessor.class.getResourceAsStream("repository"); ConfigurationContext ctx = (ConfigurationContext) ConfigurationContextFactory.createConfigurationContextFromFileSystem(repositoryInputStream, null); InputStream fileNameInputStream = WinProcessor.class.getResourceAsStream("file_name"); System.setProperty("javax.net.ssl.trustStore", fileNameString);
getResourceAsStream を使用すると、次のような問題を回避できます。 IDE から実行する場合と JAR ファイルとして実行する場合のパスの違いの問題。 InputStream は JAR 内のリソースの場所を正しくポイントしているため、その内容にアクセスできます。
以上がJava で JAR ファイルからリソースにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。