ฉันควรวางไฟล์ log4j.properties ไว้ที่ไหนเมื่อใช้ไดเร็กทอรี Maven แบบเดิม
ฉันควรวางไฟล์ log4j.properties ไว้ที่ไหนเมื่อใช้ไดเร็กทอรี Maven แบบเดิม
คำตอบ:
src/main/resources
คือ "ตำแหน่งมาตรฐาน" สำหรับสิ่งนี้
อัปเดต:ข้างต้นตอบคำถาม แต่ไม่ใช่วิธีแก้ปัญหาที่ดีที่สุด ตรวจสอบคำตอบอื่น ๆ และความคิดเห็นเกี่ยวกับเรื่องนี้ ... คุณอาจจะไม่ส่งคุณสมบัติการบันทึกของคุณเองด้วย jar แต่ปล่อยให้ไคลเอนต์แทน (เช่นแอพเซิร์ฟเวอร์สภาพแวดล้อมของพื้นที่งาน ฯลฯ ) เพื่อกำหนดค่าการบันทึกที่ต้องการ ดังนั้นการใส่เข้าไปจึงsrc/test/resources
เป็นทางออกที่ฉันต้องการ
หมายเหตุ: เมื่อพูดถึงการออกจากการกำหนดค่าบันทึกที่เป็นรูปธรรมให้กับลูกค้า / ผู้ใช้คุณควรพิจารณาแทนที่log4j
ด้วยslf4j
ในแอปของคุณ
resources
และlog4j.properties
ในโฟลเดอร์ที่กล่าวถึงในคำตอบ
src/main/resources
จะถูกคัดลอกตามค่าเริ่มต้นเป็นtarget/classes
เพียงแค่ใส่เข้าไปก็src/main/resources
จะรวมอยู่ในอาร์ติแฟกต์ เช่นถ้าอาร์ติแฟกต์ของคุณเป็น JAR คุณจะมี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 สามารถมองเห็นได้จริงคุณต้องเพิ่มไดเร็กทอรีเอาต์พุตลงในคลาสพา ธ หากอาร์ติแฟกต์ของคุณเป็น JAR ที่สามารถเรียกใช้งานได้คุณอาจใช้ maven-assembly-plugin เพื่อสร้างมันขึ้นมา ภายในปลั๊กอินนั้นคุณสามารถเพิ่มโฟลเดอร์ปัจจุบันของ JAR ลงในพา ธ คลาสได้โดยการเพิ่ม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 จะอยู่ถัดจากไฟล์ JAR ของคุณซึ่งสามารถกำหนดค่าได้อย่างอิสระ
ในการรันแอ็พพลิเคชันของคุณโดยตรงจาก Eclipse ให้เพิ่มresources
ไดเร็กทอรีไปยัง classpath ของคุณในการกำหนดค่าการรันของคุณ: Run->Run Configurations...->Java Application->New
เลือกClasspath
แท็บเลือกAdvanced
และเรียกดูsrc/resources
ไดเร็กทอรีของคุณ
${project.build.directory}
หรือควรแก้ไขเส้นทางจริงที่โครงการอยู่ในไดรฟ์ในเครื่องของฉัน
"การขุดข้อมูล" บางบัญชีsrc/main/resources
เป็นสถานที่ทั่วไป
ผลการค้นหาGoogle Code :
src/main/resources/log4j.properties
: 4877src/main/java/log4j.properties
: 215 resources
ไม่ใช่นะresource
ถ้าจำไม่ผิด
resource
เป็นเพียงการพิมพ์ผิด
ทรัพยากรที่ใช้ในการเตรียมใช้งานโปรเจ็กต์ควรอยู่ในโฟลเดอร์src / main / resources ในการเปิดใช้งานการโหลดทรัพยากรเหล่านี้ในระหว่างการสร้างเราสามารถเพิ่มรายการใน pom.xml ในโครงการ maven เป็นทรัพยากรในการสร้าง
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
นอกจากนี้ยังสามารถเก็บไฟล์. property อื่น ๆ ไว้ในโฟลเดอร์นี้เพื่อใช้สำหรับการเตรียมใช้งาน การกรองถูกตั้งค่าเป็นจริงหากคุณต้องการให้มีตัวแปรบางตัวในไฟล์คุณสมบัติของโฟลเดอร์ทรัพยากรและเติมข้อมูลจากไฟล์คุณสมบัติตัวกรองโปรไฟล์ซึ่งเก็บไว้ใน src / main / ตัวกรองซึ่งตั้งค่าเป็นโปรไฟล์แต่เป็นกรณีการใช้งานที่แตกต่างกันโดยสิ้นเชิง . ในตอนนี้คุณสามารถเพิกเฉยได้
นี่คือปลั๊กอินทรัพยากร mavenทรัพยากรที่ยอดเยี่ยมมีประโยชน์เพียงแค่เรียกดูส่วนอื่น ๆ ด้วย
เมื่อวางไฟล์ทรัพยากรในตำแหน่งอื่นไม่ใช่ทางออกที่ดีที่สุดที่คุณสามารถใช้ได้:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<build>
ตัวอย่างเช่นเมื่อไฟล์รีซอร์ส (เช่น jaxb.properties) อยู่ลึกเข้าไปในแพ็กเกจพร้อมกับคลาส Java
หากไฟล์ log4j.properties หรือ log4j.xml ของคุณไม่พบภายใต้ src / main / resources ให้ใช้ PropertyConfigurator.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/>