ฉันควรวางไฟล์ 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/>