Расположение файлов системных ресурсов модуля Java 9

Вместо того, чтобы писать все, о чем идет речь, я хотел бы разместить изображение. Проблема в том, где мне разместить каталог ресурсов, содержащий файлы .properties?

См. Изображение для получения дополнительной информации и точной проблемы. Каталог ресурсов Java 9


person Asif Mushtaq    schedule 07.02.2018    source источник
comment
Ваш проект - это именованный модуль? Кроме того, что, если вы удалите этот / из имени inputStream? Кстати, совместное использование воспроизводимого кода лучше, чем снимок экрана.   -  person Naman    schedule 08.02.2018
comment
Расположение в проекте не имеет значения для модульной системы. Однако его расположение в выходном каталоге действительно важно. Он должен находиться в том же дереве каталогов, что и файлы классов. Если это не так, то IDE необходимо исправить модуль, чтобы добавить ресурсы. Если вы создаете модульный JAR, тогда ресурсы должны находиться в том же файле JAR, что и файлы классов. Что касается имени ресурса, то /abc.properties подходит для случая, когда ресурс находится в каталоге верхнего уровня модуля.   -  person Alan Bateman    schedule 08.02.2018
comment
@AlanBateman, тогда почему я не могу получить доступ? где мне разместить каталог ресурсов?   -  person Asif Mushtaq    schedule 08.02.2018
comment
@nullpointer Я не знаю о проекте с именем module, я боролся с IDEA, чтобы создать проект java 9. И даже попробовал убрав /   -  person Asif Mushtaq    schedule 08.02.2018
comment
Опять же, важно понять, где находятся ресурсы в выходном каталоге. Если они находятся в том же дереве, что и скомпилированные классы, Class.getResourceXXX найдет их. Он не может найти ресурсы в местах, которые не являются частью модуля.   -  person Alan Bateman    schedule 08.02.2018
comment
Вот структура вывода imgur.com/a/EMiZ8, и на выходе есть производственная папка, затем снова там три модули как climesoft.data climesoft.main climesoft.net   -  person Asif Mushtaq    schedule 08.02.2018
comment
Это даже отдаленно не связано с Java 9. Речь идет о том, как вы настраиваете свою IDE для включения ресурсов в вашу сборку. Вы столкнетесь с той же проблемой с предыдущими версиями Java.   -  person Holger    schedule 09.02.2018
comment
@Holger, не могли бы вы предложить какую-нибудь статью, которая поможет мне решить эту проблему? Имеете ввиду, какой должна быть структура проекта для разных IDEA? или даже для командной строки.   -  person Asif Mushtaq    schedule 09.02.2018


Ответы (3)


Прежде всего, если вы используете Intellij IDEA и Gradle, попробуйте добавить это в свой build.gradle:

apply plugin: 'idea'
idea {
    module {
        inheritOutputDirs = true
    }
}

Более вероятное решение

По моему опыту, Java 9 заблокировала доступ к ресурсам на основе некоторых правил о том, инкапсулирован ли ресурс или нет (см. Документацию javadocs).

То, что у меня сработало:

  1. Помещение ресурса в корень моей папки ресурсов и вызов

    getClass().getClassLoader().getResource("myresource.txt")

  2. Сделайте так, чтобы структура папок, ведущих к вашему ресурсу, соответствовала подходящему пакету в вашем проекте. Например, если у вас есть com.your.package, то структура вашей папки будет ресурсами / com / your / package / myresource.txt. После этого вы можете добавить opens com.your.package в module-info.java и получить свой ресурс, позвонив

    YourClass.class.getResource("/com/your/package/myresource.txt")

Что еще можно попробовать

Пометка папки ресурсов как ресурсов в Intellij IDEA.

Intellij отмечает папку как ресурсы

person Lukehb    schedule 14.02.2018
comment
Это решение inheritOutputDirs = true устранило мою проблему с запуском JavaFX 11 в IntelliJ IDEA в проекте Gradle. - person Trisha; 11.10.2018
comment
Я просто хотел быстро добавить, что inheritOutputDirs позволяет Gradle размещать файлы ресурсов в том же месте, что и файлы классов, в конечной выходной папке, вместо того, чтобы поддерживать отдельную структуру ресурсов. - person Christian; 02.05.2019

Я столкнулся с аналогичной проблемой при чтении файлов свойств из модульной банки. Я поместил файлы свойств вне банки и указал расположение файлов свойств как путь к классам. Все работало нормально. Моя версия Java выглядит следующим образом: Java HotSpot (TM) 64-разрядная серверная виртуальная машина (сборка 9 + 181, смешанный режим)

person zsk2021    schedule 14.02.2018

Это известная ошибка в intellij. По неизвестной причине он отложен навсегда

https://youtrack.jetbrains.com/issue/IDEA-197469

person Ashok Koyi    schedule 19.09.2020