Подтвердить что ты не робот

Добавление ресурсов в проект 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, но все еще не работало

4b9b3361

Ответ 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.)