Ketika saya menjalankan maven install
proyek multi-modul maven saya, saya selalu mendapatkan output berikut:
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
Jadi, saya mencari sedikit di Google, tetapi yang bisa saya temukan adalah saya harus menambahkan:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
... ke pom.xml saya. Tapi itu sudah ada di sana (pada orang tua pom.xml
).
Mengkonfigurasi <encoding>
untuk maven-resources-plugin atau maven-compiler-plugin juga tidak memperbaikinya.
Jadi apa masalahnya?
Jawaban:
Oke, saya menemukan masalahnya.
Saya menggunakan beberapa plugin pelaporan. Dalam dokumentasi failafe-maven-plugin ( http://maven.apache.org/plugins/maven-failsafe-plugin/integration-test-mojo.html ) Saya menemukan, bahwa
<encoding>
konfigurasi - tentu saja - menggunakan${project.reporting.outputEncoding}
secara default . Jadi saya menambahkan properti sebagai elemen anak dariproject
elemen dan semuanya baik-baik saja sekarang:Lihat juga http://maven.apache.org/general.html#encoding-warning
sumber
Ini akan menjadi tambahan dari sebelumnya, jika seseorang menemui masalah dengan huruf skandik yang tidak diselesaikan dengan solusi di atas.
Jika file sumber java mengandung huruf skandis, mereka harus ditafsirkan dengan benar oleh Java yang digunakan untuk kompilasi . (mis. huruf skandik yang digunakan dalam konstanta)
Walaupun file disimpan dalam UTF-8 dan Maven dikonfigurasi untuk menggunakan UTF-8, System Java yang digunakan oleh Maven masih akan menggunakan standar sistem (mis. Pada Windows: cp1252).
Ini akan terlihat hanya menjalankan tes melalui pakar (mungkin mencetak nilai-nilai konstanta ini dalam tes. Huruf-huruf skandik yang dicetak akan menunjukkan sebagai '<?>') Jika tidak diuji dengan benar, ini akan merusak file kelas sebagai hasil kompilasi dan menjadi dibiarkan tanpa disadari.
Untuk mencegah hal ini, Anda harus mengatur Java yang digunakan untuk kompilasi untuk menggunakan pengkodean UTF-8. Tidak cukup untuk memiliki pengaturan penyandian di maven pom.xml, Anda perlu mengatur variabel lingkungan: JAVA_TOOL_OPTIONS = -Dfile.encoding = UTF8
Juga, jika menggunakan Eclipse di Windows, Anda mungkin perlu mengatur pengkodean yang digunakan selain ini (jika Anda menjalankan tes individu melalui eclipse).
sumber
-Dfile.encoding
apakah Anda menggunakan I / O di Java tanpa secara eksplisit menentukan suatu pengkodean (yang tidak disarankan). Saya tidak melihat apa hubungannya dengan huruf skandik dalam file sumber Java. Non-ASCII dalam file sumber Java berfungsi dengan Maven saatproject.build.sourceEncoding
diatur dengan benar, seperti yang dijelaskan dalam jawaban Ethan Leroy.javac
, itu akan melewati pengkodean yang ditetapkan olehproject.build.sourceEncoding
(Anda dapat memeriksa menggunakanmvn -X
), jadi saya tidak melihat bagaimana apa yang Anda uraikan diperlukan. Jika Anda masih mendapatkan masalah penyandian dalam proyek Anda, pertimbangkan untuk menanyakannya sebagai pertanyaan terpisah - sepertinya Anda mengalami masalah yang berbeda. Idealnya, pasang test case yang dapat direproduksi.Jika Anda menggabungkan jawaban di atas, akhirnya pom.xml yang dikonfigurasi untuk UTF-8 akan tampak seperti itu.
pom.xml
sumber
Tampaknya orang-orang mencampur encoding konten dengan encoding file / sumber daya yang dibangun. Memiliki sifat maven saja tidak cukup. Setelah
-Dfile.encoding=UTF8
tidak efektif. Untuk menghindari masalah dengan penyandian, Anda harus mengikuti aturan sederhana berikut iniSelalu atur penyandian secara eksplisit, saat bekerja dengan file, string, IO dalam kode Anda. Jika Anda tidak mengikuti aturan ini, aplikasi Anda bergantung pada lingkungan. The
-Dfile.encoding=UTF8
persis bertanggung jawab untuk konfigurasi lingkungan run-time, tapi kita tidak harus bergantung padanya. Jika Anda memiliki ribuan klien, diperlukan lebih banyak upaya untuk mengonfigurasi sistem dan menemukan masalah karenanya. Anda hanya memiliki ketergantungan tambahan padanya yang dapat Anda hindari dengan mengaturnya secara eksplisit. Sebagian besar metode di Jawa yang menggunakan pengkodean default ditandai sebagai usang karena itu.Pastikan konten yang Anda kerjakan, juga dalam pengkodean yang sama, yang Anda harapkan. Jika tidak, langkah-langkah sebelumnya tidak masalah! Misalnya file tidak akan diproses dengan benar, jika penyandiannya bukan UTF8 tetapi Anda mengharapkannya. Untuk memeriksa penyandian file di Linux:
Semoga ini bermanfaat bagi seseorang.
sumber
Coba ini:
sumber
Dalam kasus saya, saya menggunakan
maven-dependency-plugin
jadi untuk menyelesaikan masalah, saya harus menambahkan properti berikut:Lihat Apache Maven Resources Plugin / Menentukan skema pengkodean karakter
sumber