Добавить файл свойств в путь класса IntelliJ

Я запускаю простую программу Java из IntelliJ IDE, используя меню Run- > Run. Он работает нормально. Теперь я хочу добавить log4j logging.

Я добавил папку ресурсов в свой корень проекта. Я добавил файл log4j.properties в эту папку. Я изменил код, чтобы что-то записать.

Каков правильный способ сообщить IntelliJ включить папку ресурсов в путь к классам, чтобы файл свойств был просмотрен?

С IntelliJ 8 я мог догадаться, как пьяная обезьяна, и в конечном итоге заставить ее работать. Сейчас у меня 9, и я полностью не увенчался успехом. Я пробовал в течение часа. Как насчет опции "Добавить в classpath" где-нибудь?/fume/vent/rant

Ответ 1

Попробуйте следующее:

  • Перейдите к структуре проекта.
  • Выберите свой модуль.
  • Найдите папку в дереве справа и выберите ее.
  • Нажмите кнопку "Источники" над этим деревом (с синей папкой), чтобы сделать эту папку исходной папкой.

Ответ 2

На самом деле у вас есть как минимум 2 способа сделать это, первый способ описан ColinD, вы просто настраиваете папку "resources" как папку Sources в IDEA. Если Шаблоны ресурсов содержит расширение вашего ресурса, то оно будет скопировано в выходной каталог, когда Сделать проект, а выходной каталог будет автоматически маршрутом класса вашего приложения.

Другим распространенным способом является добавление папки "resources" в classpath напрямую. Перейдите в Структура проекта | Модули | Ваш модуль | Зависимости, нажмите Добавить, Библиотека модулей с одним входом, укажите путь к папке "Ресурсы".

Еще одно решение - разместить файл log4j.properties непосредственно в корневом источнике вашего проекта (в каталоге пакета по умолчанию). Это так же, как и первый способ, за исключением того, что вам не нужно добавлять другой корневой источник в настройках Module Paths, файл будет скопирован в выходной каталог на Make.

Если вы хотите протестировать с помощью разных конфигураций log4j, может быть проще указать пользовательский файл конфигурации непосредственно в настройках Запуск/Отладка, VM, например:

-Dlog4j.configuration=file:/c:/log4j.properties.

Ответ 3

У меня такая же проблема, и она очень меня раздражает!!

Я всегда думал, что я был склонен делать это как ответ 2. Это использовалось для работы в Intellij 9 (теперь используется 10).

Однако я понял, что добавив эту строку в мой файл maven pom, вы можете:

<build>
  ...
  <resources>
    <resource>
      <directory>src/main/resources</directory>
    </resource>
  </resources>
  ...
</build>

Ответ 4

Я потратил немало времени на выяснение того, как это сделать в Intellij 13x. Я, видимо, никогда не добавлял файлы свойств к требуемым им артефактам, что является отдельным шагом в Intellij. Настройка ниже также работает, когда у вас есть файл свойств, который разделяется несколькими модулями.

  • Перейдите к настройке вашего проекта (CTRL + ALT + SHIFT + S)
  • В списке выберите модуль, к которому вы хотите добавить один или несколько файлов свойств.
  • Справа выберите вкладку "Зависимости".
  • Нажмите зеленый плюс и выберите "Ящики или каталоги".
  • Теперь выберите папку, содержащую файл свойств. (Я не пробовал, включая отдельный файл)
  • Теперь Intellij спросит вас, что такое "категория" выбранного файла. Выберите "классы" (даже если это не так).
  • Теперь вы должны добавить файлы свойств в артефакт. Intellij предоставит вам ярлык, показанный ниже. Он покажет ошибки в красной части внизу и "красную лампочку", которая при нажатии показывает, что вы можете добавить файлы в артефакт. Вы также можете перейти в раздел "артефакты" и вручную добавить файлы к артефактам.

enter image description here

Ответ 5

Столкнулся с аналогичной задачей, добавляя файлы с расширениями .ini в путь к классам. Нашел этот ответ, который должен добавить его в Настройки → Компилятор → Шаблоны ресурсов → [...]; *. ini

Ответ 6

Если вы столкнулись с той же проблемой с Scala и SBT:

  • Перейдите к структуре проекта. Ярлык (CTRL + ALT + SHIFT + S)

  • В крайнем левом списке выберите "Настройки проекта" > "Модули"

  • В списке модулей справа выберите модуль имени вашего проекта (без сборки) и выберите вкладку источников

  • В середине разверните папку, в которой корень вашего проекта для меня, что /home/<username>/IdeaProjects/<projectName>

  • Посмотрите на раздел Корень содержимого на правой стороне, красные пути - это каталоги, которые вы не создали. Вы захотите поместить файл свойств в каталог ресурсов. Поэтому я создал src/main/resources и поместил в него log4j.properties. Я считаю, что вы также можете изменить Корень содержимого, чтобы поместить его туда, где хотите (я этого не делал).

  • Я запустил свой код с конфигурацией SBT и нашел файл log4j.properties.

введите описание изображения здесь

Ответ 7

Для тех из вас, кто переезжает из Eclipse в IntelliJ или наоборот, это подсказка при работе с файлами свойств или другими файлами ресурсов.

Его безумие (стоимость моего целого вечера, чтобы узнать), но обе IDE работают совсем по-другому, когда дело доходит до поиска файлов ресурсов/свойств, когда вы хотите запускать локально из вашей среды IDE или во время отладки. (Упаковка в .jar тоже совсем другая, но это лучше документировано.)

Предположим, что у вас есть относительный путь, как это в вашем коде:

new FileInputStream("xxxx.properties");

(что удобно, если вы работаете с env специфическими файлами .properties, которые вы не хотите упаковывать вместе с вашим JAR)

IntelliJ

(я использую 13.1, но могу быть допустим для других версий)

Файл xxxx.properties должен находиться в каталоге PARENT проекта ROOT, чтобы его можно было найти во время выполнения, например, в IntelliJ. (Проект ROOT находится там, где находится папка /src )

ECLIPSE

Eclipse просто счастлив, когда файл xxxx.properties находится в самом ROOT проекта.

Таким образом, IntelliJ ожидает, что файл .properties будет на 1 уровень выше, чем Eclipse, когда он будет указан как это!!

Это также влияет на то, как вы должны выполнять свой код, когда у вас есть эта же строка кода (новый FileInputStream ( "xxxx.properties" );) в экспортированном .jar. Если вы хотите быть гибким и не хотите упаковывать файл .properties с вашей банкой, вам нужно будет выполнить банку, как показано ниже, чтобы правильно ссылаться на файл .properties из командной строки:

INTELLIJ EXPORTED JAR

java -cp "/path/to_properties_file/:/path/to_jar/some.jar" com.bla.blabla.ClassContainingMainMethod

ECLIPSE EXPORTED JAR

java -jar some.jar

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

Ответ 8

Возможно, это немного не по теме, поскольку вопрос уже был дан, но у меня возникла аналогичная проблема. В моем случае только некоторые из ресурсов unit test были скопированы в выходную папку при компиляции. Мой persistence.xml в папке META-INF скопирован, но ничего больше.

В конце концов я "решил" проблему, переименовав проблемные файлы, переконструировав проект, а затем изменив имена файлов на исходные. Не спрашивайте меня, почему это сработало, но это произошло. Я думаю, что мой проект IntelliJ немного не синхронизировался с файловой системой, и операция переименования вызвала какой-то внутренний "повторный поиск ресурсов".

Ответ 9

У меня была аналогичная проблема с файлом log4j.xml для unit test, все это вышло. Но выяснилось, что это было потому, что я только перезапускал неудавшийся тест.... если я снова запустил весь тестовый класс, то будет выбран правильный файл. Это находится под Intelli-j 9.0.4

Ответ 10

Я знаю, что я глупый человек, поэтому после долгого утомительного дня я потратил много времени, пытаясь отладить эту проблему, и перепробовал все ответы, опубликованные выше, но в итоге это была одна из моих самых глупых ошибок.

Я использовал org.apache.logging.log4j.Logger (: fml :), тогда как я должен был использовать org.apache.log4j.Logger. Использование этого правильного регистратора спасло мне жизнь.