Додайте файл властивостей до класного шляху IntelliJ


122

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

Я додав папку ресурсів під корінь проекту. Я додав файл log4j.properties у цю папку. Я змінив код, щоб щось записати.

Який правильний спосіб сказати IntelliJ включити папку ресурсів у classpath, щоб побачити файл властивостей?

З IntelliJ 8 я міг здогадатися, як п'яна мавпа, і врешті-решт змусив її працювати. Зараз у мене 9, і я цілком невдалий. Я намагався протягом години. Як щодо опції "Додати в класний шлях" десь? / дим / вентиляція / рент


Гаразд, ситуація вирішена. Це нова установка IntelliJ - log4J за замовчуванням НЕ включений. У своєму коді я імпортував реєстратор запасів, а не log4j. Бордовий журнал підтримує подібні методи, тому було очевидно, що я використовував неправильний реєстратор! Не дивно, що він не читав файл властивостей log4j або повідомляв, що мені потрібно налаштувати log4j. Який удар в зуби!
Тоні Енніс

Знайшов хороший опис для початківця, щоб log4j tuttlem.github.io/2015/02/08/start-logging-with-log4j2.html
Рахал Канішка

Відповіді:


91

Спробуйте це:

  • Перейдіть до структури проекту.
  • Виберіть модуль.
  • Знайдіть папку в дереві праворуч і виберіть її.
  • Натисніть кнопку Джерела над цим деревом (із синьою папкою), щоб зробити цю папку джерелом папки.

Я робив це близько 50 разів, я просто робив це знову. Мій вихід не змінюється, хоча я змінив схему перетворення макета на те, що було б очевидним. Мені цікаво, чи є інший log4j.properties в моєму класі.
Тоні Енніс

29
Перевірте шаблони ресурсів у налаштуваннях компілятора. Перевірте, чи існує "? *. Властивості". Це за замовчуванням, але це єдине, про що я можу придумати верхній частині голови.
ColinD

3
Альтернатива Sourcesbutton - клацніть правою кнопкою миші будь-який каталог, який ви створили, і виберіть "Позначити каталог як": "Корінь джерела"
mschr

10
Зауважте, що якщо ви створили проект із Maven POM, замість спеціальної джерельної структури, це рішення не працюватиме. Замість цього вам потрібно додати цей каталог як ресурс до POM. Дивіться відповідь Пітера Тігесена.
lreeder

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

47

Насправді у вас є щонайменше два способи це зробити, перший спосіб описаний ColinD, ви просто налаштовуєте папку "ресурси" як папку "Джерела" в IDEA. Якщо Patterns Ресурс містить розширення вашого ресурсу, то він буде скопійований в вихідний каталог , коли ви Make проект і вихідний каталог автоматично є шлях до класів додатки.

Ще один поширений спосіб - безпосередньо додати папку "ресурси" до класного шляху. Перейти до структури проекту | Модулі | Ваш модуль | Залежності , натисніть Додати , бібліотека модулів з одним входом , вкажіть шлях до папки "ресурси".

Ще одне рішення - поставити файл log4j.properties безпосередньо під вихідний корінь вашого проекту (у каталог пакунків за замовчуванням). Це те саме, що перший спосіб, за винятком того, що вам не потрібно додавати інший вихідний корінь у налаштуваннях модулів Шляхи , файл буде скопійовано у вихідний каталог у Make.

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

-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 = файл: / c: /log4j.properties в аргументах програми. Параметри VM зробили для мене трюк.
Ajak6

42

У мене така ж проблема, і це мене дуже дратує !!

Я завжди вважав, що мене хочу зробити як відповідь 2. Це працювало в Intellij 9 (зараз він використовує 10).

Однак я зрозумів, що додавання цих рядків до мого файлу Pom Maven допомагає:

<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
Джеймс

Я подумав, що в моєму коді не так? Дякую за таке рішення
Shoaib Chikate

5

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

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

  • У крайньому лівому списку виберіть Налаштування проекту> Модулі

  • У списку модулів праворуч від цього виберіть модуль назви вашого проекту (без збірки) та виберіть вкладку джерела

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

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

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

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


2

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

Його божевілля (коштувало цілий вечір, щоб дізнатися), але робота обох IDE зовсім інша, коли справа стосується пошуку файлів ресурсів / експертних даних, коли ви хочете запустити локально зі свого IDE або під час налагодження. (Упаковка до .jar теж зовсім інша, але це документально краще.)

Припустимо, у вашому коді є такий відносний напрямок шляху:

new FileInputStream("xxxx.properties");

(що зручно, якщо ви працюєте з env-специфічними .properties файлами, які ви не хочете упаковувати разом зі своїм JAR)

INTELLIJ

(Я використовую 13.1, але може бути дійсним для інших версій)

Файл xxxx.properties повинен знаходитися в РІЗНІЙ РІР проекту ROOT, щоб його можна було отримати під час виконання, як це в IntelliJ. (Проект ROOT - це місце, де знаходиться папка / src)

ECLIPSE

Eclipse просто щасливий, коли файл xxxx.properties знаходиться в самому проекті ROOT.

Тож IntelliJ очікує, що файл .properties буде на 1 рівень вищим за Eclipse, коли на нього посилається такий !!

Це також впливає на те, як ви повинні виконати свій код, коли у вашому експортованому .jar є такий самий рядок коду (новий FileInputStream ("xxxx.properties");). Коли ви хочете бути спритними і не хочете упакувати файл .properties з вашою банку, вам доведеться виконати jar, як показано нижче, щоб правильно вказати файл .properties з командного рядка:

ІНТЕЛЛІЙ ЕКСПОРТУВАНИЙ ЖАР

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

ECLIPSE EXPORT JAR

java -jar some.jar

де експортований виконуваний jar Eclipse просто очікує, що посилається файл .properties буде в тому самому місці, де і файл .jar


Так, logging.properties, на відміну від log4j2.xml або log4j.properties, повинен знаходитись у корені модуля IntelliJ. Крім того, в відміну від Log4j, який просто працює, я виявив , що я все ще повинен був присяжних вишці , щоб запустити в IntelliJ (Eclipse , буде та ж історія, що це помилка Java логування), см stackoverflow.com/questions/960099 / ... . Однією з альтернатив було б виправити конфігурацію запуску / налагодження за допомогою -Djava.util.logging.config.file =, що мені здається досить незручним, оскільки я вважаю за краще мати конфігурацію в коді або в очікуваному файлі властивостей.
Russ Bateman

1

Можливо, це трохи поза темою, оскільки, на запитання вже відповіли, але я відчув подібну проблему. У моєму випадку лише деякі тестові ресурси блоку були скопійовані у папку виводу при компіляції. Мою persistent.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.