调用 jar 中的 ClassLoader getResource() 使用来自调用方的资源



我有两个Java项目。项目 B 是一个实用程序,旨在打包为 jar 并由其他项目调用。项目 A 需要调用项目 B。但是,当项目 B 调用 ClassLoader getResource() 时,它正在从项目 A 加载资源。如何让它从项目 B 加载?看起来这应该很容易,所以我觉得我一定错过了一些简单的东西。以下代码位于项目 B 中,从项目 A 调用,路径/to/file.txt位于项目 B 的资源文件夹中。

System.out.println(Paths.get(classLoader.getResource("path/to/file.txt").toURI()).toString());
Output: C:Users....projectAtargettest-classes

通常,实现此目的的方法是将path/to/file.txt作为资源包含在B.jar中。

例如,在 Maven 项目中将 Guava 19.0 作为编译时依赖项包含在内(看起来您正在使用 Maven)。 以下代码对我有用:

// pom.properties is bundled in guava-19.0.jar.
URL resource = Example.class.getResource("/META-INF/maven/com.google.guava/guava/pom.properties");
System.out.println(resource.toString());

最新更新