Kiedy uruchamiam maven install
projekt maven z wieloma modułami, zawsze otrzymuję następujące dane wyjściowe:
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
Więc trochę googlowałem, ale wszystko, co mogę znaleźć, to to, że muszę dodać:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
... do mojego pom.xml. Ale już tam jest (u rodzica pom.xml
).
Konfigurowanie <encoding>
wtyczki maven-resources-plugin lub wtyczki maven-compiler również nie naprawia tego.
Więc w czym problem?
Odpowiedzi:
OK, znalazłem problem.
Korzystam z niektórych wtyczek raportujących. W dokumentacji wtyczki failafe-maven-plugin ( http://maven.apache.org/plugins/maven-failsafe-plugin/integration-test-mojo.html ) stwierdziłem, że
<encoding>
konfiguracja - oczywiście - używa${project.reporting.outputEncoding}
domyślnie . Dodałem więc właściwość jako element potomnyproject
elementu i wszystko jest teraz w porządku:Zobacz też http://maven.apache.org/general.html#encoding-warning
źródło
Byłoby to dodatkiem do poprzedniego, jeśli ktoś napotka problem ze skandalicznymi literami, który nie został rozwiązany za pomocą powyższego rozwiązania.
Jeśli pliki źródłowe Java zawierają skandynawskie litery, muszą zostać poprawnie zinterpretowane przez język Java używany do kompilacji . (np. skandynawskie litery używane w stałych)
Nawet jeśli pliki są przechowywane w UTF-8, a Maven jest skonfigurowany do używania UTF-8, System Java używany przez Maven nadal będzie używał domyślnych ustawień systemu (np. W Windows: cp1252).
Będzie to widoczne tylko podczas uruchamiania testów za pomocą maven (możliwe wydrukowanie wartości tych stałych w testach. Wydrukowane skandynawskie litery byłyby pokazane jako „<?>”). Nieprawidłowe przetestowanie spowodowałoby uszkodzenie plików klasy jako wyniku kompilacji i pozostawiony niezauważony.
Aby temu zapobiec, musisz ustawić Javę używaną do kompilacji, aby używała kodowania UTF-8. Nie wystarczy mieć ustawienia kodowania w maven pom.xml, musisz ustawić zmienną środowiskową: JAVA_TOOL_OPTIONS = -Dfile.encoding = UTF8
Ponadto, jeśli używasz Eclipse w systemie Windows, może być konieczne ustawienie dodatkowo kodowania (jeśli uruchamiasz indywidualny test przez Eclipse).
źródło
-Dfile.encoding
jeśli używasz I / O w Javie bez wyraźnego określenia kodowania (co nie jest zalecane). Nie widzę, co to ma wspólnego ze skandalicznymi literami w plikach źródłowych Java. Pliki inne niż ASCII w plikach źródłowych Java działają z Maven, jeśliproject.build.sourceEncoding
są ustawione poprawnie, jak opisano w odpowiedzi Ethana Leroya.javac
wywoła, przekaże kodowanie ustawione przezproject.build.sourceEncoding
(możesz to sprawdzić za pomocąmvn -X
), więc nie rozumiem, jak to, co opisujesz, jest konieczne. Jeśli nadal występują problemy z kodowaniem w swoim projekcie, rozważ zadanie go jako osobnego pytania - wygląda na to, że napotykasz inny problem. Idealnie, opublikuj odtwarzalny przypadek testowy.Jeśli połączysz powyższe odpowiedzi, w końcu powinien wyglądać plik pom.xml skonfigurowany dla UTF-8.
pom.xml
źródło
Wygląda na to, że ludzie mieszają kodowanie treści z wbudowanym kodowaniem plików / zasobów. Posiadanie tylko właściwości maven nie wystarczy. Mając na
-Dfile.encoding=UTF8
nie skuteczne. Aby uniknąć problemów z kodowaniem, należy przestrzegać następujących prostych zasadZawsze ustawiaj kodowanie jawnie, gdy pracujesz z plikami, łańcuchami, IO w swoim kodzie. Jeśli nie zastosujesz się do tej reguły, Twoja aplikacja zależy od środowiska.
-Dfile.encoding=UTF8
Dokładnie jest odpowiedzialny za konfigurację środowiska run-time, ale nie powinno zależeć od niego. Jeśli masz tysiące klientów, konfigurowanie systemów i znajdowanie problemów z tego powodu wymaga więcej wysiłku. Masz tylko dodatkową zależność, której możesz uniknąć, ustawiając go jawnie. Większość metod w Javie, które używają domyślnego kodowania, są z tego powodu oznaczone jako przestarzałe.Upewnij się, że zawartość, z którą pracujesz, jest również w tym samym kodowaniu, czego oczekujesz. Jeśli tak nie jest, poprzednie kroki nie mają znaczenia! Na przykład plik nie zostanie poprawnie przetworzony, jeśli jego kodowanie nie jest zgodne z UTF8, ale można się tego spodziewać. Aby sprawdzić kodowanie plików w systemie Linux:
Mam nadzieję, że będzie to dla kogoś przydatne.
źródło
Spróbuj tego:
źródło
W moim przypadku użyłem go
maven-dependency-plugin
w celu rozwiązania problemu musiałem dodać następującą właściwość:Zobacz Wtyczka zasobów Apache Maven / Określanie schematu kodowania znaków
źródło