Saya menjalankan program Java sederhana dari IntelliJ IDE menggunakan menu Run-> Run. Ini bekerja dengan baik. Sekarang saya ingin menambahkan logging log4j.
Saya menambahkan folder sumber daya di bawah root proyek saya. Saya menambahkan file log4j.properties di folder itu. Saya mengubah kode untuk mencatat sesuatu.
Apa cara yang tepat untuk memberi tahu IntelliJ agar menyertakan folder sumber daya di classpath sehingga file properti terlihat?
Dengan IntelliJ 8 saya bisa menebak seperti monyet mabuk dan akhirnya membuatnya bekerja. Saya punya 9 sekarang dan saya sama sekali tidak berhasil. Saya sudah mencoba selama satu jam. Bagaimana dengan opsi "Tambahkan ke classpath" di suatu tempat? / fume / vent / kata-kata kasar
java
intellij-idea
classpath
Tony Ennis
sumber
sumber
Jawaban:
Coba ini:
sumber
Sebenarnya Anda memiliki minimal 2 cara untuk melakukannya, cara pertama dijelaskan oleh ColinD, Anda tinggal mengkonfigurasi folder "resources" sebagai folder Sources di IDEA. Jika Pola Sumber Daya berisi ekstensi sumber daya Anda, maka itu akan disalin ke direktori keluaran saat Anda Membuat proyek dan direktori keluaran secara otomatis menjadi jalur kelas aplikasi Anda.
Cara umum lainnya adalah dengan menambahkan folder "resources" ke classpath secara langsung. Pergi ke Struktur Proyek | Modul | Modul Anda | Dependencies , klik Add , Single-Entry Module Library , tentukan jalur ke folder "resource".
Solusi lain adalah meletakkan file log4j.properties langsung di bawah root Sumber proyek Anda (di direktori paket default). Ini sama dengan cara pertama kecuali Anda tidak perlu menambahkan root Source lain di pengaturan Module Paths , file akan disalin ke direktori output di Make.
Jika Anda ingin menguji dengan konfigurasi log4j yang berbeda, mungkin lebih mudah untuk menentukan file konfigurasi kustom langsung di konfigurasi Run / Debug , parameter VM diajukan seperti:
-Dlog4j.configuration=file:/c:/log4j.properties
.sumber
Saya memiliki masalah yang sama dan itu sangat mengganggu saya !!
Saya selalu berpikir saya seharusnya melakukan sebagai jawaban 2. Itu dulu bekerja di Intellij 9 (sekarang menggunakan 10).
Namun saya menemukan bahwa dengan menambahkan baris ini ke file pom maven saya membantu:
sumber
Saya menghabiskan cukup banyak waktu untuk mencari tahu bagaimana melakukan ini di Intellij 13x. Sepertinya saya tidak pernah menambahkan file properti ke artefak yang memerlukannya, yang merupakan langkah terpisah di Intellij. Penyiapan di bawah ini juga berfungsi saat Anda memiliki file properti yang dibagikan oleh beberapa modul.
sumber
Menghadapi tantangan serupa menambahkan file dengan ekstensi .ini ke classpath. Menemukan jawaban ini , yaitu menambahkannya ke Preferences -> Compiler -> Resource Patterns -> [...]; *. Ini
sumber
Jika Anda pernah mengalami masalah yang sama dengan Scala dan SBT:
Pergi ke Struktur Proyek. Pintasannya adalah (CTRL + ALT + SHIFT + S)
Di daftar paling kiri, pilih Project Settings> Modules
Pada daftar modul di sebelah kanan itu, pilih modul dari nama proyek Anda (tanpa build) dan pilih tab sumber
Di tengah, perluas folder yang menjadi root dari proyek Anda untuk saya itu
/home/<username>/IdeaProjects/<projectName>
Lihatlah bagian Content Root di sisi kanan, jalur merah adalah direktori yang belum Anda buat. Anda akan ingin meletakkan file properti di direktori Resources. Jadi saya membuat
src/main/resources
dan meletakkan log4j.properties di dalamnya. Saya yakin Anda juga dapat memodifikasi Content Root untuk meletakkannya di mana pun Anda inginkan (saya tidak melakukan ini).Saya menjalankan kode saya dengan konfigurasi SBT dan menemukan file log4j.properties saya.
sumber
Bagi Anda yang bermigrasi dari Eclipse ke IntelliJ atau sebaliknya berikut adalah tip saat bekerja dengan file properti atau file resource lainnya.
Ini menjengkelkan (menghabiskan waktu sepanjang malam untuk mengetahuinya) tetapi kedua pekerjaan IDE sangat berbeda ketika harus mencari file resource / propertty ketika Anda ingin menjalankan secara lokal dari IDE Anda atau selama debugging. (Pengemasan ke .jar juga sangat berbeda, tetapi itu didokumentasikan dengan lebih baik.)
Misalkan Anda memiliki rujukan jalur relatif seperti ini di kode Anda:
(yang nyaman jika Anda bekerja dengan file .properties spesifik env yang tidak ingin Anda paketkan bersama JAR Anda)
INTELLIJ
(Saya menggunakan 13.1, tetapi mungkin valid untuk lebih banyak versi)
File xxxx.properties harus berada di direktori PARENT dari ROOT proyek agar dapat diambil saat runtime seperti ini di IntelliJ. (ROOT proyek adalah tempat folder / src berada)
GERHANA
Eclipse senang ketika file xxxx.properties berada di ROOT proyek itu sendiri.
Jadi IntelliJ mengharapkan file .properties menjadi 1 level lebih tinggi dari Eclipse ketika direferensikan seperti ini !!
Ini juga memengaruhi cara Anda harus mengeksekusi kode ketika Anda memiliki baris kode yang sama ini (FileInputStream baru ("xxxx.properties");) di .jar yang diekspor. Jika Anda ingin lincah dan tidak ingin mengemas file .properties dengan jar Anda, Anda harus menjalankan jar seperti di bawah ini untuk mereferensikan file .properties dengan benar dari baris perintah:
JAR EKSPOR INTELLIJ
ECLIPSE EKSPOR JAR
di mana Eclipse mengekspor jar yang dapat dieksekusi hanya akan mengharapkan file .properties yang direferensikan berada di lokasi yang sama dengan tempat file .jar berada
sumber
Mungkin ini sedikit di luar topik, mengingat pertanyaannya telah terjawab, tetapi saya mengalami masalah yang sama. Dalam kasus saya, hanya beberapa sumber daya pengujian unit yang disalin ke folder keluaran setelah kompilasi. Persistence.xml saya di folder META-INF disalin tetapi tidak ada yang lain .
Pada akhirnya saya "memecahkan" masalah dengan mengganti nama file yang bermasalah, membangun kembali proyek dan kemudian mengubah nama file kembali ke aslinya. Jangan tanya saya mengapa ini berhasil tetapi berhasil. Tebakan terbaik saya adalah, entah bagaimana, proyek IntelliJ saya sedikit tidak sinkron dengan sistem file dan operasi penggantian nama memicu semacam "penelusuran ulang sumber daya" internal.
sumber
Ini adalah salah satu kesalahan bodoh yang telah saya lakukan. Saya menghabiskan banyak waktu untuk mencoba men-debug masalah ini dan mencoba semua tanggapan yang diposting di atas, tetapi pada akhirnya, itu adalah salah satu dari banyak kesalahan bodoh saya.
Saya menggunakan
org.apache.logging.log4j.Logger
(: fml :) sedangkan saya seharusnya menggunakanorg.apache.log4j.Logger
. Menggunakan logger yang benar ini menyelamatkan malam saya.sumber
Saya memiliki masalah yang sama dengan file log4j.xml untuk unit test, melakukan semua hal di atas. Tapi saya tahu itu karena saya hanya menjalankan ulang tes yang gagal .... jika saya menjalankan ulang seluruh kelas tes, file yang benar diambil. Ini di bawah Intelli-j 9.0.4
sumber