私は2つのJavaプロジェクトを持っています。プロジェクトBはユーティリティであり、jarファイルとしてパッケージ化され、他のプロジェクトから呼び出されます。プロジェクトAはプロジェクトBを呼び出す必要があります。しかし、プロジェクトBがClassLoader getResource()を呼び出すと、プロジェクトAからリソースをロードしています。プロジェクトBからロードするにはどうすればよいですか? これは簡単だと思われるので、私は単純なものを見逃しているはずです。 次のコードは、プロジェクトAのパスから呼び出され、プロジェクトBにある//file.txtにプロジェクトBのリソースフォルダ内にあるClassLoader呼び出されたjarのgetResource()は呼び出し側のリソースを使用します
System.out.println(Paths.get(classLoader.getResource("path/to/file.txt").toURI()).toString());
Output: C:\Users\....\projectA\target\test-classes
'のgetResource(...)は、' '瓶のようなURLが返されます:!/path/to/B.jarを/path/to/file.txt'whichパスがありますこれは実際には使用できません。ファイルに含まれているファイルです。 'Path'の代わりに' File'を使うようにしてください。代わりに 'file:/path/to/B.jar!/ path/to/file.txt'のように出力する必要があります。また、リソースのロードに相対パスを使用しないでください。 'path/to/file.txt'を'/path/to/file.txt'に変更してください。 'getResource(...) 'の代わりに、そのファイルからバイトを直接ロードしたい場合は、' getResourceAsStream(...) 'も考慮してください。 –