До тех пор, пока не появилась немодульная Java, вы просто поместите файл в src/main/java/resources
, убедитесь, что он находится в пути к классам, а затем загрузите его с помощью
file = getClass().getClassLoader().getResourceAsStream("myfilename");
практически из любого места в пути к классам.
Теперь с модулями сюжет утолщается.
Настройка моего проекта следующая:
module playground.api {
requires java.base;
requires java.logging;
requires framework.core;
}
Файл конфигурации находится внутри src/main/resources/config.yml
.
Проект запускается с
java -p target/classes:target/dependency -m framework.core/com.framework.Main
Поскольку основной класс находится не в моем собственном проекте, а во внешнем модуле фреймворка, он не может видеть config.yml
. Теперь вопрос в том, есть ли способ как-то поместить мой файл конфигурации в модуль или открыть его? Должен ли я изменить способ загрузки файла вышестоящим фреймворком?
Я пробовал использовать «экспорт» или «открывает» в информации о модуле, но он хочет иметь имя пакета, а не имя папки.
Как добиться этого наилучшим практическим способом, чтобы он работал как в Java 8 и с минимальными изменениями?
com.framework.Main
читает ресурсы с помощьюClass.getResource
? - person Naman   schedule 21.10.2017src/main/resources
, если это не пакет? Думаю, я мог бы положить его в пакет, но это похоже на антипаттерн. Это первая часть моего замешательства. Во-вторых, под верхним уровнем вы подразумеваете, какую папку? Я также попытался поместить свой файл конфигурации в META-INF, но без кубиков. - person cen   schedule 22.10.2017opens src/main/resources
, офс не компилируется. - person cen   schedule 22.10.2017target/classes
, но не работает. Это сработает, если я добавлю-cp target/classes
. Но нужно ли использовать -cp при работе с лобзиком? По какой-то причине я не должен этого делать. - person cen   schedule 22.10.2017-cp
. Можете ли вы вместо этого добавить--add-moduels playground.api
в командную строку. Первоначальный модуль (модуль, который вы указываете для -m) - com.framework.Main, и я предполагаю, что никому не требуется игровая площадка .api, поэтому он не разрешается (вы можете быстро проверить это, добавив--show-module-resolution
для разрешения трассировки при запуске). - person Alan Bateman   schedule 22.10.2017