2016-06-14 1 views
0

У меня есть два java-проекта. Проект B - это утилита, предназначенная для упаковки в виде банки и призванная другими проектами. Проекту A необходимо вызвать проект B. Однако, когда проект B вызывает ClassLoader getResource(), он загружает ресурсы из проекта A. Как мне загрузить его из проекта B? Кажется, что это должно быть легко, поэтому я чувствую, что мне не хватает чего-то простого. Следующий код в проекте В, вызывается из проекта A. путь/к/file.txt находится в папке ресурсов в проекте B.ClassLoader getResource() в имени jar использует ресурсы от вызывающего абонента

System.out.println(Paths.get(classLoader.getResource("path/to/file.txt").toURI()).toString()); 

Output: C:\Users\....\projectA\target\test-classes 
+0

'getResource (...)' возвращает URL как 'баночке: /path/to/B.jar /path/to/file.txt'which Путь фактически не может использоваться, поскольку это файл, содержащийся в файле. Попробуйте использовать 'File' вместо' Path'. Результат должен быть чем-то вроде 'file: /path/to/B.jar!/Path/to/file.txt' вместо этого. Кроме того, не используйте относительные пути для загрузки ресурсов. Измените 'путь/to/file.txt' на'/path/to/file.txt'. Также рассмотрите 'getResourceAsStream (...)', если вы хотите загрузить байты из этого файла напрямую, а не 'getResource (...)' –

ответ

0

Обычно, как вы этого добиться, чтобы включать в path/to/file.txt виде ресурс в B.jar.

В качестве примера включите Guava 19.0 в качестве зависимости времени компиляции в проекте Maven (похоже, вы используете 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()); 
+0

См. Обновленный вопрос. Ресурс есть. – PunDefeated