2013-01-14 18 views
7

Pracuję nad projektem sieciowym opartym na mavenach. W moim module internetowym używam pakietów językowych specyficznych dla różnych języków (niemiecki, hiszpania, ....). Wszystkie moje źródła są oparte na UTF-8 i erverything działa dobrze. Teraz konieczne było aktywowanie filtrowania resursu maven w celu zastąpienia niektórych konfiguracji w zależności od różnych profili maven.Nieprawidłowe kodowanie po aktywowaniu filtrowania zasobów

moim pom.xml:

..... 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
..... 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties>  
<build> 
<resources> 
    <resource> 
    <directory>src/main/resources</directory> 
     <filtering>true</filtering>    
    </resource>  
</resources> 
.... 

Od tego momentu mój plik war zawiera paczki zasobów z niewłaściwym kodowaniem. Na przykład niemieckie umlauty nie są już wyświetlane poprawnie w mojej aplikacji internetowej. Po wyłączeniu filtrowania zasobów wszystko znów jest w porządku.

Jedynym rozwiązaniem znalazłem ustawić własność project.build.sourceEncoding do „ISO-8859-1”

<properties> 
    <project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding> 
</properties> 

Ale nie mogę zrozumieć, dlaczego jest to konieczne? Wszystkie moje źródła to UTF-8, a moja aplikacja oparta jest na UTF-8? Co się stanie, jeśli będę musiał dodać paczkę zasobów - na przykład japońskie znaki?

Zajmuję na linux przy użyciu Eclipse 4.2 i Maven 3

+0

Czy używasz wtyczki maven-war (i której wersji)? – ben75

+0

Nie skonfigurowałem jawnie wtyczki maven-war-plugin. Ale kiedy dodam, kodowanie idzie nie tak. – Ralph

Odpowiedz

4

Można określić kodowanie w zasobach plugin konfigurację tak:

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-resources-plugin</artifactId> 
     <version>2.6</version> 
     <configuration> 
      ... 
      <encoding>UTF-8</encoding> 
      ... 
     </configuration> 
     </plugin> 
    </plugins> 
    ... 
    </build> 
    ... 
</project> 

Link to the Docs

+0

Miałem zamiar zasugerować to samo! – carlspring

+2

Testowałem to wcześniej, ale nie miało to żadnego efektu. – Ralph

+0

Ten sam problem tutaj. Czy w końcu sprawiłeś, że to działa? – Sloy

0

Niezupełnie odpowiedzi na swoje pytanie (przepraszam), ale myślę, że to przydatna informacja o nieruchomości project.build.sourceEncoding

Ta nieruchomość jest próbą uproszczenia zarządzania kodowaniem w projektach maven.

Chodzi o to, że wszystkie wtyczki używają go jako domyślnej wartości kodowania, gdy kodowanie nie jest określone w konfiguracji wtyczki jako samodzielne. Korzystanie z tej właściwości jako domyślnej wartości kodowania jest zaleceniem dla programistów wtyczek.

myślę, że to odbywa się we wszystkich najważniejszych i najnowszych wtyczek, ale jeden ważny wyjątek jest Maven-war-plugin przed wersją 2.2

źródła:

  • dyskusja o project.build.sourceEncoding jest here.
  • szczegóły kodowania wtyczek wojennych to here.
+0

Dzięki za te informacje. Ale mówi, że wtyczka wojny w aktualnej wersji 2.3 respektuje właściwość project.build.sourceEncoding podczas filtrowania zasobów. Ale to chyba nie działa dla mnie. Dopiero po ustawieniu project.build.sourceEncoding na ISO-8859-1, niemieckie umlauty są poprawnie dołączane do mojej wojny. – Ralph

3

Czy jesteś pewien, że pakiety zasobów (.properties) używają UTF-8?

java.util.Properties zakłada ISO-8859-1 do kodowania wiązki zasobów, zobacz http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html#load(java.io.Reader) i myślę Eclipse (a także IntelliJ IDEA) honory to domyślne kodowanie tych plików (.Properties).

Więc idź i sprawdź za pomocą edytora tekstu aktualne kodowanie tych plików w drzewie źródeł projektu, w Windows Notatnik 2 może ci w tym pomóc.

a następnie skonfigurować maven-resources-plugin jak wskazanej tutaj Configure encoding for different filetypes in maven?

1

miałem dzisiaj ten sam problem. Ustawienie project.build.sourceEncoding na UTF-8 nie będzie działać. Wszystkie przefiltrowane pliki zostaną skopiowane w ISO-8859-1 (w rzeczywistości nie testowałem, ale jestem pewien, że nie są one kopiowane w UTF-8).
Moje rozwiązanie deklaruje dwie sekcje <resource>. Jedna zawiera wszystkie pliki, które naprawdę musisz filtrować. Drugi, aby skopiować inne zasoby z ustawieniem <filtering> na wartość false.
Działa to dla mnie, ponieważ nie muszę filtrować plików I18N i plików, które muszą być ustawione, gdy kompilacja zawiera tylko znaki ASCII.

0

W systemie Windows> Preferencje> Ogólne> Przestrzeń robocza dostępny jest przycisk opcji "Kodowanie pliku tekstowego". Miałem zestaw UTF-8 i łamałem wszystkie moje znaki specjalne w kodzie.

jako domyślny w Windowsie to chyba "Cp1252".