Ответ 1
Попробуйте следующее:
- Перейдите к структуре проекта.
- Выберите свой модуль.
- Найдите папку в дереве справа и выберите ее.
- Нажмите кнопку "Источники" над этим деревом (с синей папкой), чтобы сделать эту папку исходной папкой.
Я запускаю простую программу Java из IntelliJ IDE, используя меню Run- > Run. Он работает нормально. Теперь я хочу добавить log4j logging.
Я добавил папку ресурсов в свой корень проекта. Я добавил файл log4j.properties в эту папку. Я изменил код, чтобы что-то записать.
Каков правильный способ сообщить IntelliJ включить папку ресурсов в путь к классам, чтобы файл свойств был просмотрен?
С IntelliJ 8 я мог догадаться, как пьяная обезьяна, и в конечном итоге заставить ее работать. Сейчас у меня 9, и я полностью не увенчался успехом. Я пробовал в течение часа. Как насчет опции "Добавить в classpath" где-нибудь?/fume/vent/rant
Попробуйте следующее:
На самом деле у вас есть как минимум 2 способа сделать это, первый способ описан ColinD, вы просто настраиваете папку "resources" как папку Sources в IDEA. Если Шаблоны ресурсов содержит расширение вашего ресурса, то оно будет скопировано в выходной каталог, когда Сделать проект, а выходной каталог будет автоматически маршрутом класса вашего приложения.
Другим распространенным способом является добавление папки "resources" в classpath напрямую. Перейдите в Структура проекта | Модули | Ваш модуль | Зависимости, нажмите Добавить, Библиотека модулей с одним входом, укажите путь к папке "Ресурсы".
Еще одно решение - разместить файл log4j.properties непосредственно в корневом источнике вашего проекта (в каталоге пакета по умолчанию). Это так же, как и первый способ, за исключением того, что вам не нужно добавлять другой корневой источник в настройках Module Paths, файл будет скопирован в выходной каталог на Make.
Если вы хотите протестировать с помощью разных конфигураций log4j, может быть проще указать пользовательский файл конфигурации непосредственно в настройках Запуск/Отладка, VM, например:
-Dlog4j.configuration=file:/c:/log4j.properties
.
У меня такая же проблема, и она очень меня раздражает!!
Я всегда думал, что я был склонен делать это как ответ 2. Это использовалось для работы в Intellij 9 (теперь используется 10).
Однако я понял, что добавив эту строку в мой файл maven pom, вы можете:
<build>
...
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
...
</build>
Я потратил немало времени на выяснение того, как это сделать в Intellij 13x. Я, видимо, никогда не добавлял файлы свойств к требуемым им артефактам, что является отдельным шагом в Intellij. Настройка ниже также работает, когда у вас есть файл свойств, который разделяется несколькими модулями.
Столкнулся с аналогичной задачей, добавляя файлы с расширениями .ini в путь к классам. Нашел этот ответ, который должен добавить его в Настройки → Компилятор → Шаблоны ресурсов → [...]; *. ini
Если вы столкнулись с той же проблемой с Scala и SBT:
Перейдите к структуре проекта. Ярлык (CTRL + ALT + SHIFT + S)
В крайнем левом списке выберите "Настройки проекта" > "Модули"
В списке модулей справа выберите модуль имени вашего проекта (без сборки) и выберите вкладку источников
В середине разверните папку, в которой корень вашего проекта для меня, что /home/<username>/IdeaProjects/<projectName>
Посмотрите на раздел Корень содержимого на правой стороне, красные пути - это каталоги, которые вы не создали. Вы захотите поместить файл свойств в каталог ресурсов. Поэтому я создал src/main/resources
и поместил в него log4j.properties. Я считаю, что вы также можете изменить Корень содержимого, чтобы поместить его туда, где хотите (я этого не делал).
Я запустил свой код с конфигурацией SBT и нашел файл log4j.properties.
Для тех из вас, кто переезжает из Eclipse в IntelliJ или наоборот, это подсказка при работе с файлами свойств или другими файлами ресурсов.
Его безумие (стоимость моего целого вечера, чтобы узнать), но обе IDE работают совсем по-другому, когда дело доходит до поиска файлов ресурсов/свойств, когда вы хотите запускать локально из вашей среды IDE или во время отладки. (Упаковка в .jar тоже совсем другая, но это лучше документировано.)
Предположим, что у вас есть относительный путь, как это в вашем коде:
new FileInputStream("xxxx.properties");
(что удобно, если вы работаете с env специфическими файлами .properties, которые вы не хотите упаковывать вместе с вашим JAR)
(я использую 13.1, но могу быть допустим для других версий)
Файл xxxx.properties должен находиться в каталоге PARENT проекта ROOT, чтобы его можно было найти во время выполнения, например, в IntelliJ. (Проект ROOT находится там, где находится папка /src )
Eclipse просто счастлив, когда файл xxxx.properties находится в самом ROOT проекта.
Таким образом, IntelliJ ожидает, что файл .properties будет на 1 уровень выше, чем Eclipse, когда он будет указан как это!!
Это также влияет на то, как вы должны выполнять свой код, когда у вас есть эта же строка кода (новый FileInputStream ( "xxxx.properties" );) в экспортированном .jar. Если вы хотите быть гибким и не хотите упаковывать файл .properties с вашей банкой, вам нужно будет выполнить банку, как показано ниже, чтобы правильно ссылаться на файл .properties из командной строки:
java -cp "/path/to_properties_file/:/path/to_jar/some.jar" com.bla.blabla.ClassContainingMainMethod
java -jar some.jar
где экспортируемый исполняемый банкомат Eclipse просто ожидает, что указанный файл .properties будет находиться в том же месте, что и файл .jar
Возможно, это немного не по теме, поскольку вопрос уже был дан, но у меня возникла аналогичная проблема. В моем случае только некоторые из ресурсов unit test были скопированы в выходную папку при компиляции. Мой persistence.xml в папке META-INF скопирован, но ничего больше.
В конце концов я "решил" проблему, переименовав проблемные файлы, переконструировав проект, а затем изменив имена файлов на исходные. Не спрашивайте меня, почему это сработало, но это произошло. Я думаю, что мой проект IntelliJ немного не синхронизировался с файловой системой, и операция переименования вызвала какой-то внутренний "повторный поиск ресурсов".
У меня была аналогичная проблема с файлом log4j.xml для unit test, все это вышло. Но выяснилось, что это было потому, что я только перезапускал неудавшийся тест.... если я снова запустил весь тестовый класс, то будет выбран правильный файл. Это находится под Intelli-j 9.0.4
Я знаю, что я глупый человек, поэтому после долгого утомительного дня я потратил много времени, пытаясь отладить эту проблему, и перепробовал все ответы, опубликованные выше, но в итоге это была одна из моих самых глупых ошибок.
Я использовал org.apache.logging.log4j.Logger
(: fml :), тогда как я должен был использовать org.apache.log4j.Logger
. Использование этого правильного регистратора спасло мне жизнь.