প্রচলিত মাভেন ডিরেক্টরিগুলি ব্যবহার করার সময় লগ 4j.properties ফাইলটি আমার কোথায় রাখা উচিত?
প্রচলিত মাভেন ডিরেক্টরিগুলি ব্যবহার করার সময় লগ 4j.properties ফাইলটি আমার কোথায় রাখা উচিত?
উত্তর:
src/main/resources এটির জন্য "স্ট্যান্ডার্ড প্লেসমেন্ট"।
আপডেট: উপরের প্রশ্নগুলির উত্তর দেয়, তবে এটি সেরা সমাধান নয়। এ সম্পর্কিত অন্যান্য উত্তর এবং মন্তব্যগুলি দেখুন ... আপনি সম্ভবত নিজের লগিং বৈশিষ্ট্যগুলি জারের সাথে শিপিং না করে বরং ক্লায়েন্টের কাছে রেখে দেবেন (উদাহরণস্বরূপ অ্যাপ্লিকেশন-সার্ভার, স্টেজ পরিবেশ ইত্যাদি) পছন্দসই লগিংটি কনফিগার করতে। সুতরাং, এটি দেওয়া src/test/resourcesআমার পছন্দসই সমাধান।
দ্রষ্টব্য: ক্লায়েন্ট / ব্যবহারকারীর কাছে কংক্রিট লগ কনফিগারেশন রেখে যাওয়ার কথা বলার log4jসাথে slf4jসাথে আপনার অ্যাপ্লিকেশনটিতে প্রতিস্থাপনের বিষয়টি বিবেচনা করা উচিত ।
resourcesএবং log4j.propertiesউত্তরে উল্লিখিত ফোল্ডারে।
src/main/resourcesডিফল্ট হিসাবে অনুলিপি করা হবেtarget/classes
এটি কেবল putting src/main/resourcesোকাতেই এটি শিল্পকর্মের অভ্যন্তরে বান্ডিল হবে। উদাহরণস্বরূপ, যদি আপনার নিদর্শনটি একটি জার হয়, আপনার লগিংটি log4j.propertiesকনফিগারযোগ্য করার প্রাথমিক বিন্দুটি হারাতে এটির ভিতরে ফাইলটি থাকবে ।
আমি সাধারণত src/main/resourcesএটিকে রাখি এবং এটির মতো লক্ষ্যবস্তু হওয়ার জন্য এটি আউটপুট হিসাবে সেট করে:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.directory}</targetPath>
<includes>
<include>log4j.properties</include>
</includes>
</resource>
</resources>
</build>
অতিরিক্তভাবে, log4j আসলে দেখতে এটির জন্য, আপনাকে শ্রেণি পথে আউটপুট ডিরেক্টরি যুক্ত করতে হবে। আপনার নিদর্শনটি যদি একটি এক্সিকিউটেবল জেআর হয় তবে আপনি সম্ভবত এটি তৈরির জন্য ম্যাভেন-এসেম্বলি-প্লাগইন ব্যবহার করেছেন। এই প্লাগইনটির ভিতরে আপনি জেআর-এর বর্তমান ফোল্ডারটিকে শ্রেণীর পথে যুক্ত করতে Class-Pathপারেন এর মতো একটি ম্যানিফেস্ট এন্ট্রি যুক্ত করে :
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.your-package.Main</mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
এখন log4j.properties ফাইলটি আপনার জেআর ফাইলের ঠিক পাশেই থাকবে, স্বাধীনভাবে কনফিগার করা যাবে।
Eclipse থেকে সরাসরি আপনার অ্যাপ্লিকেশনটি চালানোর resourcesজন্য আপনার রান কনফিগারেশনে আপনার ক্লাসপাথে ডিরেক্টরি যুক্ত করুন : ট্যাবটি Run->Run Configurations...->Java Application->Newনির্বাচন করুন Classpath, Advancedআপনার src/resourcesডিরেক্টরিতে নির্বাচন করুন এবং ব্রাউজ করুন ।
${project.build.directory}উচিত বা আমার স্থানীয় ড্রাইভে প্রকল্পটি যে সত্যিকারের পথে বাস করে তা সম্পাদনা করা উচিত?
এর জন্য কিছু "ডেটা মাইনিং" অ্যাকাউন্টগুলি src/main/resourcesসাধারণ জায়গা।
গুগল কোড অনুসন্ধানে ফলাফল :
src/main/resources/log4j.properties: 4877src/main/java/log4j.properties: 215 resourcesনয় resource, যদি আমি মনে করি না।
resourceশুধুমাত্র টাইপো ছিল
প্রকল্পটি আরম্ভ করার জন্য ব্যবহৃত সংস্থানগুলি এসআরসি / প্রধান / সংস্থান ফোল্ডারে অগ্রাধিকার দেওয়া হয় are বিল্ড চলাকালীন এই সংস্থানগুলির লোডিং সক্ষম করতে, একটি বিল্ড রিসোর্স হিসাবে maven প্রজেক্টে pom.xML এ সহজেই এন্ট্রি যুক্ত করা যায়
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
অন্যান্য .properties ফাইলগুলিও আরম্ভের জন্য ব্যবহৃত এই ফোল্ডারে রাখা যেতে পারে। ফিল্টারিং সত্য হিসাবে সেট করা থাকে যদি আপনি রিসোর্স ফোল্ডারের প্রোপার্টি ফাইলগুলিতে কিছু ভেরিয়েবল রাখতে চান এবং তাদের প্রোফাইল ফিল্টার প্রোপার্টি ফাইল থেকে পপুলেট করতে চান, যা এসসিআর / মেইন / ফিল্টারগুলিতে রাখা হয় যা প্রোফাইল হিসাবে সেট করা থাকে তবে এটি সম্পূর্ণরূপে আলাদা ব্যবহারের ক্ষেত্রে হয় । আপাতত, আপনি এগুলি উপেক্ষা করতে পারেন।
এটি একটি দুর্দান্ত রিসোর্স মাভেন রিসোর্স প্লাগইন , এটি দরকারী, কেবলমাত্র অন্যান্য বিভাগের মাধ্যমেও ব্রাউজ করুন।
অন্য জায়গায় রিসোর্স ফাইল স্থাপন করা আপনি ব্যবহার করতে পারেন এমন সেরা সমাধান নয়:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<build>
উদাহরণস্বরূপ যখন জাভা ক্লাসের সাথে সংস্থানসমূহের ফাইলগুলি (যেমন jaxb.properties) গভীর প্যাকেজগুলির ভিতরে যায়।
যদি আপনার লগ 4j.properties বা log4j.xML ফাইলটি এসসিআর / প্রধান / সংস্থানসমূহের আওতায় না পাওয়া যায় তবে এই সম্পত্তিConfigurator.configure ("log4j.xML") ব্যবহার করুন;
PropertyConfigurator.configure("log4j.xml");
Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.error(message);
বিল্ড ট্যাগগুলির অভ্যন্তরে আপনার pom.xML এ সংস্থানগুলি থেকে নীচের কোডটি যুক্ত করুন। সুতরাং এর অর্থ সম্পদ ট্যাগগুলি অবশ্যই আপনার pom.xML এ বিল্ড ট্যাগের অভ্যন্তরে থাকতে হবে
<build>
<resources>
<resource>
<directory>src/main/java/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<build/>