Добавьте файл свойств в путь к классам IntelliJ - PullRequest
113 голосов
/ 22 сентября 2010

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

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

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

С IntelliJ 8 я мог угадать, как пьяная обезьяна, и в конце концов заставить ее работать. У меня сейчас 9, и я совершенно неудачна. Я пытался в течение часа. Как насчет опции «Добавить в classpath» где-нибудь? / дым / вентиляция / напыщенная речь

Ответы [ 10 ]

82 голосов
/ 22 сентября 2010

Попробуйте это:

  • Перейти к структуре проекта.
  • Выберите ваш модуль.
  • Найдите папку в дереве справа и выберите ее.
  • Нажмите кнопку «Источники» над этим деревом (с синей папкой), чтобы сделать эту папку папкой с источниками.
47 голосов
/ 22 сентября 2010

На самом деле, у вас есть как минимум 2 способа сделать это, первый способ описан ColinD, вы просто настраиваете папку «resources» как папку Sources в IDEA.Если Resource Patterns содержит расширение вашего ресурса, то оно будет скопировано в выходной каталог, когда вы Make , проект и выходной каталог автоматически станут classpath вашего приложения.

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

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

ЕслиЕсли вы хотите протестировать различные конфигурации log4j, может быть проще указать пользовательский файл конфигурации непосредственно в Run / Debug configuration , Параметры виртуальной машины , поданные как:

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

39 голосов
/ 09 марта 2011

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

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

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

<build>
  ...
  <resources>
    <resource>
      <directory>src/main/resources</directory>
    </resource>
  </resources>
  ...
</build>
16 голосов
/ 17 ноября 2014

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

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

enter image description here

13 голосов
/ 26 января 2012

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

4 голосов
/ 24 июля 2017

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

  • Перейти к структуре проекта. Сочетание клавиш (CTRL + ALT + SHIFT + S)

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

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

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

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

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

enter image description here

2 голосов
/ 08 июля 2014

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

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

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

new FileInputStream("xxxx.properties");

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

INTELLIJ

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

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

ECLIPSE

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

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

Это также влияет на то, как вы должны выполнять свой код, когда у вас такая же строка кода (new FileInputStream ("xxxx.properties ");) в вашем экспортированном .jar.Если вы хотите быть гибкими и не хотите упаковывать файл .properties в свой jar-файл, вам нужно будет выполнить jar, как показано ниже, для правильной ссылки на файл .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есть

1 голос
/ 28 февраля 2013

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

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

0 голосов
/ 24 мая 2019

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

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

0 голосов
/ 28 октября 2011

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

...