Добавление ресурсов в проект IntelliJ для Maven
У меня есть такая структура проекта:
src
|-main
|-java
|-com.abc.xyz
|-Login.java
Я должен добавить файл ресурса к этому и прочитать ресурс с
InputStream is = getClass().getResourceAsStream("launchers.properties");
Это дает ноль.
В Intellij я не могу добавить новый пакет в папку src/main
для resources
так что структура проекта выглядит следующим образом. Как я могу загрузить файл ресурса launchers.properties
в проект?
src
|-main
|-java
|-com.abc.xyz
|-Login.java
|-resources
|-com.abc.xyz
|-Login
|-launcher.properties
Я попробовал решение, предложенное @maba, но все еще не работало ![]()
Ответы
Ответ 1
launcher.properties
не должен находиться под папкой Login
. Он должен быть помещен непосредственно в папку src/main/resources/com/abc/xyz
.
Это так же просто, как я сказал, но если папка ресурсов не помечена как исходная папка, это может быть проблемой.
Это начальный класс и настройка:
![enter image description here]()
Теперь создайте папку ресурсов:
![enter image description here]()
![enter image description here]()
Эта вновь созданная папка должна быть автоматически помечена как папка с источниками, а если это синий цвет, то она есть. В противном случае вам придется пометить его вручную:
![enter image description here]()
Теперь вы сможете добавить к нему пакеты:
![enter image description here]()
![enter image description here]()
И теперь вы можете добавить к нему файл:
![enter image description here]()
![enter image description here]()
И повторное использование приложения не даст вам никакого значения null
:
![enter image description here]()
И представление пакета обязательно отобразит файл launchers.properties
:
![enter image description here]()
Ответ 2
Как отметил @maba, ваш файл свойств должен быть в том же пакете, что и ваш класс, чтобы ваш код работал.
Итак, у вас должно быть два файла:
- SRC/главная/Java/ком/ABC/XYZ/Login.java
- SRC/основные/ресурсы/ком/ABC/XYZ/launcher.properties
Если IntelliJ показывает ресурс или нет, это не относится к вопросу. Что вам нужно сделать, это проверить, включены ли результаты в ваш целевой артефакт.
Сделайте build all
в IntelliJ, откройте полученный WAR/JAR/EAR с помощью своего любимого средства просмотра ZIP и перейдите в папку "com/abc/xyz". Вы должны увидеть оба файла.
- Если это так, вы делаете что-то не так в своем коде. Проверьте наличие опечаток, особенно точек и пробелов в конце или начале (например, "launcher.properties [пробел]" ), скопируйте/вставьте имя файла, чтобы убедиться, что
- Если их нет, ваша установка IntelliJ неверна. Ресурсы не включаются в вашу целевую сборку. Проверьте онлайн для учебных пособий, как это сделать с идеей IntelliJ.
Ответ 3
У меня была та же проблема, и я заметил, что файл ресурсов, например: my.properties
, не копируется в соответствующую папку модуля в target
каталоге после того, как происходит сборка. Чтобы решить эту проблему, мне пришлось поручить Maven скопировать ресурсы из каталога модуля в target
каталог во время процесса сборки. В файле .pom
я добавил такой элемент <resource>
:
<project ...>
...
<build>
...
<resource>
<directory>src/main/java/com/abc/xyz</directory>
<targetPath>com/abc/xyz</targetPath>
</resource>
</build>
...
</project>
Обратите внимание, что элемент <directory>
относится к расположению файла .pom
, то есть к корневому каталогу проекта, а элемент <targetPath>
указывает имя пакета, разделенное косыми чертами.
Ответ 4
из меню Run/edit configuration in VM option вы должны добавить -Dspring.config.location = путь файл
Я пробовал это в IntelliJ, и это работает!
Ответ 5
Нет..... структура неправильная.... вам не следует создавать один и тот же пакет под resources
, что некрасиво и не правильно: resources
предназначены для ресурсов и не должны содержать исходные пакеты.
При использовании ClassLoader.getResources(asStream)(path)
метод просто начинает поиск из корня пути к классам, и имя пути не может начинаться с /
качестве начальных символов. Что вам нужно сделать, это отметить resources
как resources folder
в IntelliJ. Затем файлы в resources
будут перечислены в classpath, и вы можете легко использовать их, как вы сделали.
(Я вижу, что в предыдущих ответах эта опция еще не была доступна в 2013 году, у вас есть только mark as source folder
, так же как в Eclipse до сих пор у нас есть "добавить исходную папку", но теперь в 2018 году она доступна в Intellij: вы можете пометить папка как источник, ресурсы, источник теста, ресурсы теста, и все они будут добавлены в корень classpath.)