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/resources
là 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ế log4j
bằng slf4j
trong ứng dụng của mình.
resources
và log4j.properties
trong thư mục được đề cập trong câu trả lời.
src/main/resources
sẽ được sao chép theo mặc định thànhtarget/classes
Chỉ cần đặt nó vào src/main/resources
sẽ 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.properties
tệ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/resources
và đặ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-Path
mụ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 resources
thư 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->New
chọn Classpath
tab, chọn Advanced
và duyệt đến src/resources
thư 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/resources
là 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 resources
không resource
, nếu tôi nhớ chính xác.
resource
chỉ 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/>