Tôi nên đặt tệp log4j.properIES ở đâu khi sử dụng các thư mục Maven thông thường?
Tôi nên đặt tệp log4j.properIES ở đâu khi sử dụng các thư mục Maven thông thường?
Câu trả lời:
src/main/resources là "vị trí tiêu chuẩn" cho việc này.
Cập nhật: Trên đây trả lời câu hỏi, nhưng nó không phải là giải pháp tốt nhất. Kiểm tra các câu trả lời khác và các nhận xét về điều này ... có thể bạn sẽ không vận chuyển các thuộc tính ghi nhật ký của riêng mình bằng bình mà thay vào đó để lại cho máy khách (ví dụ: máy chủ ứng dụng, môi trường sân khấu, v.v.) để định cấu hình ghi nhật ký mong muốn. Vì vậy, đặt nó vào src/test/resourceslà giải pháp ưa thích của tôi.
Lưu ý: Nói về việc để lại cấu hình nhật ký cụ thể cho khách hàng / người dùng, bạn nên xem xét thay thế log4jbằng slf4jtrong ứng dụng của mình.
resourcesvà log4j.propertiestrong thư mục được đề cập trong câu trả lời.
src/main/resourcessẽ được sao chép theo mặc định thànhtarget/classes
Chỉ cần đặt nó vào src/main/resourcessẽ bó nó bên trong cổ vật. Ví dụ: nếu tạo phẩm của bạn là JAR, bạn sẽ có log4j.propertiestệp bên trong nó, mất điểm ban đầu làm cho việc ghi nhật ký có thể định cấu hình được.
Tôi thường đặt nó vào src/main/resourcesvà đặt nó thành đầu ra cho mục tiêu như vậy:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.directory}</targetPath>
<includes>
<include>log4j.properties</include>
</includes>
</resource>
</resources>
</build>
Ngoài ra, để log4j thực sự nhìn thấy nó, bạn phải thêm thư mục đầu ra vào đường dẫn lớp. Nếu tạo phẩm của bạn là một JAR thực thi, có lẽ bạn đã sử dụng plugin maven-assembly-plugin để tạo nó. Bên trong plugin đó, bạn có thể thêm thư mục hiện tại của JAR vào đường dẫn lớp bằng cách thêm một Class-Pathmục nhập bảng kê khai như vậy:
<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>
Bây giờ tệp log4j.properIES sẽ ở ngay bên cạnh tệp JAR của bạn, có thể định cấu hình độc lập.
Để chạy ứng dụng của bạn trực tiếp từ Eclipse, hãy thêm resourcesthư mục vào đường dẫn lớp trong cấu hình chạy của bạn: Run->Run Configurations...->Java Application->Newchọn Classpathtab, chọn Advancedvà duyệt đến src/resourcesthư mục của bạn .
${project.build.directory}hay nên được chỉnh sửa theo đường dẫn thực tế mà dự án nằm trong ổ đĩa cục bộ của tôi?
Một số tài khoản "khai thác dữ liệu" src/main/resourceslà nơi điển hình.
Kết quả về Tìm kiếm Google Code :
src/main/resources/log4j.properties: 4877src/main/java/log4j.properties: 215 resourceskhông resource, nếu tôi nhớ chính xác.
resourcechỉ là một lỗi đánh máy.
Các tài nguyên được sử dụng để khởi tạo dự án tốt nhất là đặt trong thư mục src / main / resource . Để cho phép tải các tài nguyên này trong quá trình xây dựng, người ta có thể chỉ cần thêm các mục trong tệp pom.xml trong dự án maven làm tài nguyên xây dựng
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
Các tệp .properations khác cũng có thể được giữ trong thư mục này được sử dụng để khởi tạo. Lọc được đặt thành đúng nếu bạn muốn có một số biến trong tệp thuộc tính của thư mục tài nguyên và điền chúng từ tệp thuộc tính của bộ lọc hồ sơ, được giữ trong src / main / bộ lọc được đặt làm hồ sơ nhưng đó là trường hợp sử dụng hoàn toàn khác . Để bây giờ, bạn có thể bỏ qua chúng.
Đây là một plugin tài nguyên maven tài nguyên tuyệt vời , nó rất hữu ích, chỉ cần duyệt qua các phần khác.
Khi đặt các tệp tài nguyên ở một vị trí khác không phải là giải pháp tốt nhất bạn có thể sử dụng:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<build>
Ví dụ: khi các tệp tài nguyên (ví dụ jaxb.properies) đi sâu vào bên trong các gói cùng với các lớp Java.
Nếu tệp log4j.properies hoặc log4j.xml của bạn không được tìm thấy trong src / main / resource, hãy sử dụng PropertyConfigurator.configure ("log4j.xml") này;
PropertyConfigurator.configure("log4j.xml");
Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.error(message);
Thêm mã dưới đây từ các thẻ tài nguyên trong tệp pom.xml của bạn bên trong các thẻ xây dựng. vì vậy, điều đó có nghĩa là các thẻ tài nguyên phải nằm trong các thẻ xây dựng trong tệp pom.xml của bạn
<build>
<resources>
<resource>
<directory>src/main/java/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<build/>