Доступ к ресурсам gradle из Java
У меня есть проект java с gradle с этой структурой
.
├── myproject
│ ├── src
│ | └── main
│ | ├── java
│ | └── resources
│ | └── myresource.xml
| ├── build
| | ├── classes
| | | └── main
│ | | └── myresource.xml
| | ├── resources
Я пытаюсь получить доступ к некоторым файлам в папке ресурсов с помощью ClassLoader, например
ClassLoader.getSystemClassLoader().getResoure("/myresource.xml");
но он не находит файл.
Единственный способ найти эти файлы - изучить известную структуру проекта
Path resourcesPath= FileSystems.getDefault().getPath(System.getProperty("user.dir"), "/src/main/resources/");
Любая идея о том, что я делаю неправильно?
Ответы
Ответ 1
Ну, похоже, мои трудности возникли из-за другой проблемы (ресурсы не копируются в нужные места). Как только я решил эту проблему, ClassLoader смог найти мои ресурсы, используя любую из этих двух форм:
ClassLoader.getSystemClassLoader().getResource("./myresource.xml");
ClassLoader.getSystemClassLoader().getResource("myresource.xml");
Изменить: При использовании jar, встроенного в другие приложения, прежнее решение не работает, используйте его в этом случае:
Thread.currentThread().getContextClassLoader().getResource("myresource.xml")
Ответ 2
http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getResource(java.lang.String)
Например, что-то вроде MyMain.class.getResource("/config.txt")
или используйте относительный путь, если это необходимо.
Ответ 3
Может быть, вы должны использовать это так:
Thread.currentThread().getContextClassLoader().getResource("myresource.xml")
Если я использую ClassLoader.getSystemClassLoader().getResource("myresource.xml")
Когда я использую его как пакет jar, встроенный в другие приложения, у меня все равно нет доступа к ресурсам.