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


122

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

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

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

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


Хорошо, ситуация разрешена. Это новая установка IntelliJ - log4J НЕ включен по умолчанию. В моем коде я импортировал регистратор акций, а не log4j. Фондовый регистратор поддерживает аналогичные методы, поэтому было не очевидно, что я использовал неправильный регистратор! Неудивительно, почему он не читал файл свойств log4j и не сообщал, что мне нужно настроить log4j. Какой удар по зубам!
Тони Эннис,

Нашел хорошее описание для новичка в log4j tuttlem.github.io/2015/02/08/start-logging-with-log4j2.html
Rahal

Ответы:


91

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

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

Я проделал это примерно 50 раз, я сделал это снова. Мои результаты не меняются, хотя я изменил шаблон преобразования макета на что-то очевидное. Мне интересно, есть ли в моем пути к классам еще один log4j.properties.
Тони Эннис,

29
Проверьте шаблоны ресурсов в настройках компилятора. Убедитесь, что там есть "? *. Properties". Он есть по умолчанию, но это единственное, о чем я могу придумать.
ColinD

3
Альтернатива кнопке «Источники»
mschr

10
Обратите внимание, что если вы создали свой проект из Maven POM, а не из специальной исходной структуры, это решение не будет работать. Вместо этого вам нужно добавить этот каталог в качестве ресурса в POM. См. Ответ Питера Тигесена.
lreeder

Также может быть выполнено программно через PropertyConfigurator.configure ("../ conf / log4j.properties")
Джейсон Д.

47

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

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

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

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

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


Я сделал ваши параграфы 2 и 3 безрезультатно. Я уверен, что предложения работают , просто они не повлияли на них - они ведут себя так, как будто в пути к классам есть еще один файл log4j.properties. Но я нигде этого не вижу. Если я полностью удалю свой файл свойств log4j, я не получу в консоли сообщение «вы должны настроить log4j». Я впервые использую бесплатный IntelliJ (и версию 9.x), так что, возможно, это как-то связано с этим.
Тони Эннис

1
Использование явного параметра -D VM также не дало результата. На данный момент я могу только предполагать, что упал с вершины «глупого дерева» и ударил каждую ветку на пути вниз! Думаю, я пойду рыться в JetBrains и поспрашиваю ...
Тони Эннис,

Не могли бы вы отправить образец проекта с точными инструкциями по воспроизведению проблемы на адрес support@jetbrains.com?
CrazyCoder,

Я передавал -Dlog4j.configuration = file: / c: /log4j.properties в аргументах программы. Параметры виртуальной машины помогли мне.
Ajak6 03

42

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

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

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

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

Это была именно та проблема, с которой я столкнулся, теперь файлы ресурсов успешно копируются в папку вывода.
artjomka

Этот ответ действительно работает. Я тоже сделал то, что предложил colinD в своих комментариях. Спасибо.

Спасибо, это единственное решение, которое у меня сработало.
Minh Thiện

18

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

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

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


14

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


1
это была именно та проблема, с которой я столкнулся с файлами .conf
Джеймс

Я подумал, что, черт возьми, не так с моим кодом? Спасибо за это решение
Шоаиб Чикате

5

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

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

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

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

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

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

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

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


2

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

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

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

new FileInputStream("xxxx.properties");

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

IntelliJ

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

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

ЗАТМЕНИЕ

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

java -jar some.jar

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


Да, logging.properties, в отличие от log4j2.xml или log4j.properties, должен находиться в корне модуля IntelliJ. Также, в отличие от Log4j, который просто работает, я обнаружил, что мне все еще нужно использовать jury-rig для запуска внутри IntelliJ (Eclipse будет той же историей, это ошибка ведения журнала Java), см. Stackoverflow.com/questions/960099/… . Другой альтернативой было бы исправить конфигурацию запуска / отладки с помощью -Djava.util.logging.config.file =, что я считаю довольно неудобным, поскольку я предпочел бы иметь конфигурацию в коде или в ожидаемом файле свойств.
Расс Бейтман,

1

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

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


1

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

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


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.