IntelliJ के वर्गपथ में एक गुण फ़ाइल जोड़ें


122

मैं रन-> रन मेनू का उपयोग करके इंटेलीजे आईडीई से एक सरल जावा प्रोग्राम चला रहा हूं। यह बढ़िया काम करता है। अब मैं log4j लॉगिंग जोड़ना चाहता हूं।

मैंने अपने प्रोजेक्ट रूट के तहत एक संसाधन फ़ोल्डर जोड़ा। मैंने उस फ़ोल्डर में एक log4j.properties फ़ाइल जोड़ी। मैंने कुछ लॉग करने के लिए कोड बदल दिया।

IntelliJ को क्लासपाथ में संसाधन फ़ोल्डर में शामिल करने का सही तरीका क्या है, इसलिए गुण फ़ाइल देखी गई है?

IntelliJ 8 के साथ मैं एक नशे में बंदर की तरह अनुमान लगा सकता था और अंततः इसे काम करने के लिए प्राप्त कर सकता था। मेरे पास अभी 9 हैं और मैं पूरी तरह से असफल हूं। मैं एक घंटे से कोशिश कर रहा हूं। कहीं "एड टू क्लासपाथ" विकल्प के बारे में कैसे? / धूआं / वेंट / शेख़ी


ठीक है, स्थिति हल हो गई है। यह IntelliJ की एक नई स्थापना है - log4J डिफ़ॉल्ट रूप से शामिल नहीं है। मेरे कोड में मैंने स्टॉक लकड़हारा आयात किया था, लॉग 4j नहीं। स्टॉक लकड़हारा इसी तरह के तरीकों का समर्थन करता है इसलिए यह स्पष्ट नहीं था कि मैं गलत लकड़हारा का उपयोग कर रहा था! कोई आश्चर्य नहीं कि यह log4j गुण फ़ाइल या रिपोर्टिंग को क्यों नहीं पढ़ रहा था जिसे मुझे log4j को कॉन्फ़िगर करने की आवश्यकता थी। दांतों में क्या लात!
टोनी एननिस

शुरुआत के लिए एक अच्छा विवरण मिला log4j tuttlem.github.io/2015/02/08/start-log-with-log4j2.html पर लॉग करने के लिए
राहल कनिष्क

जवाबों:


91

इसे इस्तेमाल करे:

  • प्रोजेक्ट स्ट्रक्चर पर जाएं।
  • अपने मॉड्यूल का चयन करें।
  • दाईं ओर ट्री में फ़ोल्डर ढूंढें और उसे चुनें।
  • उस फ़ोल्डर के ऊपर स्रोत बटन पर क्लिक करें (नीले फ़ोल्डर के साथ) उस फ़ोल्डर को एक स्रोत फ़ोल्डर बनाने के लिए।

मैंने लगभग 50 बार किया है, मैंने इसे फिर से किया है। मेरा आउटपुट तब भी नहीं बदल रहा है जब मैंने लेआउट रूपांतरण पैटर्न को कुछ ऐसा बदल दिया था जो स्पष्ट था। मुझे आश्चर्य हो रहा है कि क्या कोई अन्य log4j.properties मेरी कक्षा में है।
टोनी एननिस

29
कंपाइलर सेटिंग्स में संसाधन पैटर्न की जाँच करें। जाँच करें कि "? * गुण" में है। यह डिफ़ॉल्ट रूप से है, लेकिन यह केवल एक और चीज है जो मैं अपने सिर के ऊपर से सोच सकता हूं।
कोलिनड

3
स्रोतबटन के लिए वैकल्पिक - आपने जो भी निर्देशिका बनाई है उस पर राइट क्लिक करें और "मार्क डायरेक्टरी एज़" चुनें: "सोर्स रूट"
mschr

10
ध्यान दें कि यदि आपने एक एड-हॉक स्रोत संरचना के बजाय, मावेन पोम से अपनी परियोजना बनाई है, तो यह समाधान काम नहीं करेगा। इसके बजाय आपको उस निर्देशिका को POM के संसाधन के रूप में जोड़ना होगा। पीटर थिएजसेन का जवाब देखें।
18

प्रॉपर्टीकॉन्फिगरेटर.कॉनफिगर ("../ conf / log4j.properties") के माध्यम से भी प्रोग्राम किया जा सकता है
जेसन डी

47

दरअसल, आपके पास इसे करने के लिए कम से कम 2 तरीके हैं, पहला तरीका कॉलिनड द्वारा वर्णित किया गया है, आप बस "संसाधन" फ़ोल्डर को आईडीईए में स्रोत फ़ोल्डर के रूप में कॉन्फ़िगर करते हैं। यदि संसाधन पैटर्न में आपके संसाधन का विस्तार होता है, तो इसे आउटपुट निर्देशिका में कॉपी किया जाएगा जब आप प्रोजेक्ट बनाते हैं और आउटपुट निर्देशिका स्वचालित रूप से आपके आवेदन का एक वर्गपाठ होता है।

एक और सामान्य तरीका है "संसाधन" फ़ोल्डर को सीधे क्लासपाथ में जोड़ना। प्रोजेक्ट स्ट्रक्चर पर जाएं | मॉड्यूल | आपका मॉड्यूल | निर्भरताएँ , जोड़ें पर क्लिक करें , एकल-प्रवेश मॉड्यूल लाइब्रेरी , "संसाधन" फ़ोल्डर के लिए पथ निर्दिष्ट करें।

फिर भी एक अन्य समाधान लॉग 4j.properties फ़ाइल को सीधे आपके प्रोजेक्ट के स्रोत रूट (डिफ़ॉल्ट पैकेज निर्देशिका में) के तहत रखा जाएगा । यह पहले तरीके के समान है, सिवाय इसके कि आपको मॉड्यूल पथ सेटिंग में किसी अन्य स्रोत रूट को जोड़ने की आवश्यकता नहीं है , फ़ाइल को मेक पर आउटपुट निर्देशिका में कॉपी किया जाएगा।

यदि आप विभिन्न log4j कॉन्फ़िगरेशन के साथ परीक्षण करना चाहते हैं, तो सीधे रन / डीबग कॉन्फ़िगरेशन में कस्टम कॉन्फ़िगरेशन फ़ाइल निर्दिष्ट करना आसान हो सकता है , जैसे वीएम पैरामीटर दर्ज किए गए हैं:

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


मैंने आपके पैराग्राफ 2 और 3 को बिना किसी प्रभाव के किया है। मुझे यकीन है कि सुझाव कर रहा हूँ काम यह है कि अभी वे कोई प्रभाव नहीं पड़ा है - यह बर्ताव करता है जैसे classpath में एक और log4j.properties फ़ाइल। लेकिन मैं इसे कहीं नहीं देख सकता। अगर मैं अपने log4j गुण फ़ाइल को पूरी तरह से हटा देता हूं, तो मुझे कंसोल में "आपको log4j चेतावनी को कॉन्फ़िगर करना होगा" नहीं मिलता है। मैं पहली बार फ्री इंटेलीज (और संस्करण 9.x) का उपयोग कर रहा हूं, इसलिए शायद इसके साथ कुछ करना है।
टोनी एननीस

1
स्पष्ट-डीएम वीएम पैरामीटर का उपयोग करने का भी कोई प्रभाव नहीं पड़ा। इस बिंदु पर मैं केवल इतना ही समझ सकता हूं कि मैं 'बेवकूफ पेड़' के ऊपर से गिर गया हूं और नीचे की ओर जाने वाली हर शाखा से टकरा गया हूं! मुझे लगता है कि मैं JetBrains पर चारों ओर से गुजरूंगा और चारों ओर से पूछूंगा ...
टोनी एननिस

क्या आप कृपया support@jetbrains.com समस्या को पुन: पेश करने के लिए सटीक चरणों के साथ नमूना परियोजना भेज सकते हैं?
क्रेजीक्रोडर

मैं गुजर रहा था -Dlog4j.configuration = file: / c: /log4j.properties प्रोग्राम तर्कों में। वीएम मापदंडों ने मेरे लिए चाल चली।
अजाक 6

42

मैं एक ही समस्या है और यह मुझे जबरदस्त रूप से परेशान करता है !!

मैंने हमेशा सोचा है कि मुझे जवाब 2 के रूप में करने के लिए अधिमानित किया गया था। वह इंटेलीज 9 (अब 10 का उपयोग करके) में काम करता था।

हालाँकि मुझे लगा कि इन लाइनों को मेरे मावेन पोम फ़ाइल में जोड़ने से मदद मिलती है:

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

यह सटीक समस्या थी जो मुझे हो रही थी, अब संसाधन फ़ाइलों को आउटपुट फ़ोल्डर में सफलतापूर्वक कॉपी किया जाता है।
Artjomka

यह जवाब वास्तव में काम करता है। मैंने वह किया है जो कॉलिनड ने अपनी टिप्पणियों में भी सुझाया है। धन्यवाद।

धन्यवाद, यह एकमात्र समाधान है जिसने मेरे लिए काम किया।
मिन्ह थिऑन

18

मैंने काफी समय बिताया, यह जानने के लिए कि इंटेलीज 13x में यह कैसे करना है। मैंने स्पष्ट रूप से कलाकृतियों में उन गुणों की फाइलों को कभी नहीं जोड़ा, जिनकी उन्हें आवश्यकता थी, जो कि इंटेलीज में एक अलग कदम है। नीचे दी गई सेटअप भी काम करती है जब आपके पास एक गुण फ़ाइल होती है जिसे कई मॉड्यूल द्वारा साझा किया जाता है।

  • अपने प्रोजेक्ट सेटअप पर जाएं (CTRL + ALT + SHIFT + S)
  • सूची में, उस मॉड्यूल का चयन करें जिसे आप एक या एक से अधिक गुण फ़ाइलों में जोड़ना चाहते हैं।
  • दाईं ओर, निर्भरता टैब चुनें।
  • हरे रंग के प्लस पर क्लिक करें और "जार या निर्देशिका" चुनें।
  • अब उस फ़ोल्डर का चयन करें जिसमें संपत्ति फ़ाइल (s) शामिल है। (मैंने व्यक्तिगत फ़ाइल सहित कोशिश नहीं की है)
  • इंटेलीज अब आपसे पूछेगा कि चयनित फ़ाइल की "श्रेणी" क्या है। "कक्षाएं" चुनें (भले ही वे न हों)।
  • अब आपको आर्टिफ़िशियन्स में प्रॉपर्टीज़ फ़ाइलों को जोड़ना होगा। इंटेलीज आपको नीचे दिखाए गए शॉर्टकट देगा। यह नीचे के हिस्से में लाल हिस्से में और 'लाल लाइटबल्ब' में त्रुटियां दिखाएगा कि जब क्लिक किया जाता है तो आपको कलाकृतियों में फाइलें जोड़ने का विकल्प दिखाई देता है। आप 'कलाकृतियों' अनुभाग पर भी जा सकते हैं और फ़ाइलों को मैन्युअल रूप से कलाकृतियों में जोड़ सकते हैं।

यहाँ छवि विवरण दर्ज करें


14

.Pp एक्सटेंशन में .ini एक्सटेंशन के साथ फ़ाइलों को जोड़ने वाली एक समान चुनौती का सामना किया। यह उत्तर मिला , जो इसे प्राथमिकता में जोड़ना है -> संकलक -> संसाधन पैटर्न -> [...]; *। Ini


1
यह सटीक समस्या मुझे थी .conf फाइलों के साथ
जेम्स

मैंने सोचा कि मेरे कोड में क्या गलत है? इस समाधान के लिए धन्यवाद
शोएब चिकते

5

यदि आप कभी भी स्काला और एसबीटी के साथ एक ही समस्या को समाप्त करते हैं:

  • प्रोजेक्ट स्ट्रक्चर पर जाएं। शॉर्टकट है (CTRL + ALT + SHIFT + S)

  • सुदूर बाईं सूची में, प्रोजेक्ट सेटिंग्स> मॉड्यूल चुनें

  • उस पर मॉड्यूल सूची में, अपने प्रोजेक्ट नाम के मॉड्यूल का चयन करें (निर्माण के बिना) और स्रोत टैब चुनें

  • बीच में, फ़ोल्डर का विस्तार करें जो आपके लिए मेरे प्रोजेक्ट की जड़ है /home/<username>/IdeaProjects/<projectName>

  • दाईं ओर सामग्री रूट अनुभाग देखें, लाल पथ निर्देशिका है जो आपने नहीं बनाया है। आप गुण फ़ाइल को संसाधन निर्देशिका में रखना चाहते हैं। तो मैंने बनाया src/main/resourcesऔर उसमे log4j.properties डाला। मेरा मानना ​​है कि आप सामग्री रूट को संशोधित कर सकते हैं जहाँ आप इसे रखना चाहते हैं (मैंने ऐसा नहीं किया)।

  • मैंने एक एसबीटी कॉन्फ़िगरेशन के साथ अपना कोड चलाया और इसमें मेरी log4j.properties फ़ाइल मिली।

यहाँ छवि विवरण दर्ज करें


2

आप में से उन लोगों के लिए जो ग्रहण से लेकर इंटेलीज तक या इधर-उधर जाते हैं, संपत्ति फाइलों या अन्य संसाधन फ़ाइलों के साथ काम करते समय एक टिप है।

जब आप अपने आईडीई से स्थानीय स्तर पर या डीबगिंग के दौरान संसाधन चलाना चाहते हैं, तो इसकी जानकारी प्राप्त करना (मेरी पूरी शाम का पता लगाने के लिए), लेकिन दोनों आईडीई का काम काफी अलग है। (.Jar की पैकेजिंग भी काफी अलग है, लेकिन यह बेहतर दस्तावेज है।)

मान लीजिए कि आपके पास अपने कोड में इस तरह एक रिश्तेदार पथ रेफरल है:

new FileInputStream("xxxx.properties");

(जो सुविधाजनक है यदि आप env विशिष्ट .properties फ़ाइलों के साथ काम करते हैं जो आप अपने JAR के साथ पैकेज नहीं करना चाहते हैं)

IntelliJ

(मैं 13.1 का उपयोग करता हूं, लेकिन अधिक संस्करणों के लिए मान्य हो सकता है)

फ़ाइल xxxx.properties को प्रोजेक्ट रूट के PARIR dir में होना चाहिए ताकि IntelliJ में इस तरह रनटाइम पर उठाया जा सके। (परियोजना रूट जहां / src फ़ोल्डर में रहता है)

ग्रहण

एक्लिप्स तभी खुश है जब xxxx.properties फ़ाइल प्रोजेक्ट रूट पर ही है।

तो IntelliJ को उम्मीद है। फ़ाइल में 1 स्तर अधिक होने पर।

यह आपके निर्यात के तरीके को प्रभावित करने के तरीके को भी प्रभावित करता है, जब आपके पास अपने निर्यात .jar में कोड की इसी पंक्ति (नई FileInputStream ("xxxx.properties");) होती है। जब आप चुस्त रहना चाहते हैं और अपने जार के साथ .properties फ़ाइल को पैकेज नहीं करना चाहते हैं तो आपको कमांड लाइन से सही ढंग से .properties फ़ाइल को संदर्भित करने के लिए नीचे दिए जार को निष्पादित करना होगा।

INTELLIJ निर्यात जार

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

ईसीएलआईपीएसई एक्सपोर्टेड जार

java -jar some.jar

जहां एक्लिप्स एक्सपोर्ट करने योग्य जार एक्सपोर्टेड .properties फाइल को उसी स्थान पर होने की उम्मीद करेगा, जहां .jar फ़ाइल होती है।


हां, log4.j2.xml या log4j.properties के विपरीत, logging.properties, IntelliJ मॉड्यूल रूट में पाया जाना चाहिए। इसके अलावा, Log4j के विपरीत, जो सिर्फ काम करता है, मैंने पाया था कि मुझे अभी भी IntelliJ के अंदर चलने के लिए जूरी-रिग लेना है (ग्रहण एक ही कहानी होगी, यह जावा लॉगिंग की गलती है), stackoverflow.com/questions/99999/… देखें । एक विकल्प होगा -Djava.util.log.config.file = के साथ रन / डिबग कॉन्फ़िगरेशन को ठीक करना, जो मुझे असुविधाजनक लगता है क्योंकि मुझे कोड में या अपेक्षित संपत्ति फ़ाइल में कॉन्फ़िगरेशन करना होगा।
रस बेटमैन

1

शायद यह थोड़ा ऑफ-टॉपिक है, जिसे देखते हुए सवाल का जवाब पहले ही मिल चुका है, लेकिन मैंने एक समान समस्या का अनुभव किया है। मेरे मामले में केवल कुछ यूनिट टेस्ट संसाधनों को संकलन पर आउटपुट फ़ोल्डर में कॉपी किया गया था। META-INF फ़ोल्डर में मेरी दृढ़ताxml की प्रतिलिपि बनाई गई, लेकिन और कुछ नहीं

अंत में मैंने समस्याग्रस्त फ़ाइलों का नाम बदलकर, परियोजना को फिर से तैयार करके और फिर फ़ाइल नामों को मूल लोगों में बदलकर समस्या को "हल" कर दिया। मुझसे मत पूछो कि यह क्यों काम किया लेकिन यह किया। मेरा सबसे अच्छा अनुमान यह है कि, किसी भी तरह, मेरी इंटेलीज परियोजना ने फाइल सिस्टम के साथ सिंक से थोड़ा सा बाहर निकल दिया था और नाम बदलने के ऑपरेशन ने किसी प्रकार के आंतरिक "संसाधन रेसकैन" को ट्रिगर किया।


1

यह मेरे द्वारा की गई गूंगी गलतियों में से एक है। मैंने इस समस्या पर बहस करने में बहुत समय बिताया और ऊपर पोस्ट की गई सभी प्रतिक्रियाओं की कोशिश की, लेकिन अंत में, यह मेरी बहुत सी गलतियों में से एक थी।

मैं इस्तेमाल कर रहा था org.apache.logging.log4j.Logger(: fml :) जबकि मुझे इस्तेमाल करना चाहिए था org.apache.log4j.Logger। इस सही लकड़हारे के प्रयोग से मेरी शाम बच गई।


0

मुझे एक यूनिट परीक्षण के लिए log4j.xml फ़ाइल के साथ एक समान समस्या थी, उपरोक्त सभी। लेकिन यह समझ में आया क्योंकि मैं केवल एक असफल परीक्षा फिर से चला रहा था .... अगर मैं पूरे परीक्षण वर्ग को फिर से चलाऊं तो सही फ़ाइल उठाई जाती है। यह Intelli-j 9.0.4 के तहत है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.