Di mana saya harus meletakkan file log4j.properties ketika menggunakan direktori Maven konvensional?
Di mana saya harus meletakkan file log4j.properties ketika menggunakan direktori Maven konvensional?
Jawaban:
src/main/resources
adalah "penempatan standar" untuk ini.
Pembaruan: Jawaban di atas pertanyaan, tetapi itu bukan solusi terbaik. Lihat jawaban lain dan komentar tentang ini ... Anda mungkin tidak akan mengirim properti logging Anda sendiri dengan jar tetapi sebaliknya menyerahkannya kepada klien (misalnya server aplikasi, lingkungan panggung, dll) untuk mengonfigurasi logging yang diinginkan. Jadi, memasukkannya ke dalam src/test/resources
adalah solusi pilihan saya.
Catatan: Berbicara tentang meninggalkan konfigurasi log konkret kepada klien / pengguna, Anda harus mempertimbangkan untuk mengganti log4j
dengan slf4j
di aplikasi Anda.
resources
dan log4j.properties
di folder yang disebutkan dalam jawaban.
src/main/resources
akan disalin per default ketarget/classes
Hanya dengan memasukkannya, src/main/resources
akan mengikatnya di dalam artefak. Misalnya jika artefak Anda adalah JAR, Anda akan memiliki log4j.properties
file di dalamnya, kehilangan titik awal untuk membuat logging dapat dikonfigurasi.
Saya biasanya memasukkannya ke dalam src/main/resources
, dan mengaturnya untuk menjadi output ke target seperti:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.directory}</targetPath>
<includes>
<include>log4j.properties</include>
</includes>
</resource>
</resources>
</build>
Selain itu, agar log4j benar-benar melihatnya, Anda harus menambahkan direktori output ke jalur kelas. Jika artefak Anda adalah JAR yang dapat dieksekusi, Anda mungkin menggunakan plugin maven-assembly-plugin untuk membuatnya. Di dalam plugin itu, Anda bisa menambahkan folder JAR saat ini ke jalur kelas dengan menambahkan Class-Path
entri manifes seperti:
<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>
Sekarang file log4j.properties akan berada tepat di sebelah file JAR Anda, dapat dikonfigurasi secara independen.
Untuk menjalankan aplikasi Anda langsung dari Eclipse, tambahkan resources
direktori ke classpath Anda di konfigurasi run Anda: Run->Run Configurations...->Java Application->New
pilih Classpath
tab, pilih Advanced
dan browse ke src/resources
direktori Anda .
${project.build.directory}
atau harus diedit ke jalur aktual proyek yang hidup di drive lokal saya?
Beberapa akun "penambangan data" src/main/resources
adalah tempat yang biasa.
Hasil pada Pencarian Kode Google :
src/main/resources/log4j.properties
: 4877src/main/java/log4j.properties
: 215 resources
tidak resource
, jika saya ingat dengan benar.
resource
hanya salah ketik.
Sumber daya yang digunakan untuk menginisialisasi proyek sebaiknya dimasukkan ke folder src / main / resources . Untuk mengaktifkan pemuatan sumber daya ini selama pembangunan, seseorang dapat menambahkan entri di pom.xml dalam proyek pakar sebagai sumber daya bangunan
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
File .properties lainnya juga dapat disimpan dalam folder ini yang digunakan untuk inisialisasi. Penyaringan disetel benar jika Anda ingin memiliki beberapa variabel dalam file properti folder sumber daya dan mengisinya dari profil filter file properti, yang disimpan dalam src / main / filter yang ditetapkan sebagai profil tetapi itu adalah kasus penggunaan yang berbeda sama sekali . Untuk saat ini, Anda dapat mengabaikannya.
Ini adalah plugin sumber daya pakar sumber daya hebat , ini berguna, cukup telusuri bagian lain juga.
Saat meletakkan file sumber daya di lokasi lain bukanlah solusi terbaik yang dapat Anda gunakan:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<build>
Sebagai contoh ketika file sumber daya (misalnya jaxb.properties) masuk jauh ke dalam paket bersama dengan kelas Java.
Jika file log4j.properties atau log4j.xml Anda tidak ditemukan di bawah src / main / resources gunakan PropertyConfigurator.configure ini ("log4j.xml");
PropertyConfigurator.configure("log4j.xml");
Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.error(message);
Tambahkan kode di bawah ini dari tag sumber daya di pom.xml Anda di dalam tag build. jadi itu berarti tag sumber daya harus berada di dalam tag build di pom.xml Anda
<build>
<resources>
<resource>
<directory>src/main/java/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<build/>