2013-01-14 10 views
7

Sto sviluppando un progetto Web basato su maven. Nel mio modulo web sto usando diversi pacchetti di risorse specifiche per la lingua (tedesco, spagna, ....). Tutte le mie fonti sono basate su UTF-8 e erverything funziona bene. Ora è stato necessario attivare il filtro del reso Maven per sostituire alcune configurazioni in base ai diversi profili di utenti.Codifica errata dopo l'attivazione del filtro risorse

mia 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> 
.... 

Da questo momento il mio file WAR contiene bundle di risorse con codifica sbagliata. Ad esempio, le dieresi tedesche non vengono più visualizzate correttamente nella mia applicazione web. Quando disattivo il filtro delle risorse, tutto va di nuovo bene.

L'unica soluzione che ho trovato è stato quello di impostare la project.build.sourceEncoding proprietà 'ISO-8859-1'

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

Ma non riesco a capire il motivo per cui questo è necessario? Tutte le mie fonti sono UTF-8 e anche la mia applicazione è basata su UTF-8? Cosa succede se ho bisogno di aggiungere un pacchetto di risorse con - per esempio caratteri giapponesi?

Sto sviluppando su linux con Eclipse 4.2 e Maven 3

+0

stai usando maven-war-plugin (e quale versione)? – ben75

+0

Non ho configurato il plugin maven-war esplicito. Ma anche quando aggiungo la codifica diventa sbagliata. – Ralph

risposta

4

È possibile specificare la codifica delle risorse del plugin di configurazione in questo modo:

<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

Stavo per suggerire lo stesso! – carlspring

+2

L'ho provato prima ma non ha avuto alcun effetto. – Ralph

+0

Lo stesso problema qui. Hai finalmente fatto funzionare? – Sloy

0
Non

davvero una risposta alla tua domanda (mi dispiace), ma penso che sia utile informazioni sulla proprietà project.build.sourceEncoding

Questa proprietà è un tentativo di semplificare la gestione della codifica nei progetti Maven.

L'idea è che tutti i plugin lo utilizzano come valore di codifica predefinito ogni volta che la codifica non è specificata nella configurazione del plug-in. Utilizzare o meno questa proprietà come valore di codifica predefinito è solo una raccomandazione per gli sviluppatori di plug-in.

Credo che questo sia fatto in tutte le più importanti e le recenti plug-in, ma una sola eccezione importante è l'esperto di guerra-plugin prima della versione 2.2

fonti:

  • discussione su project.build.sourceEncoding è here.
  • dettagli di codifica del plug-in di guerra è here.
+0

Grazie per questa informazione. Ma dice che il plugin di guerra nella versione 2.3 rispetta la proprietà project.build.sourceEncoding quando si filtrano le risorse. Ma questo sembra non funzionare per me. Solo quando imposto project.build.sourceEncoding su ISO-8859-1 le dieresi tedesche sono correttamente raggruppate nella mia guerra. – Ralph

3

Sei sicuro che i pacchetti di risorse (.properties) utilizzino UTF-8?

java.util.Properties assume ISO-8859-1 per la codifica di pacchetti di risorse, vedere http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html#load(java.io.Reader), e penso che Eclipse (così come IntelliJ IDEA) onori questa codifica predefinita per questi file (.properties).

Quindi andare e verificare con un editor di testo la codifica corrente per questi file nell'albero dei sorgenti del progetto, in Windows Blocco note 2 può aiutare con questo.

e quindi configurare maven-resources-plugin come indicato qui Configure encoding for different filetypes in maven?

1

Ho avuto lo stesso problema di oggi. L'impostazione di project.build.sourceEncoding in UTF-8 non funzionerà. Tutti i file filtrati verranno copiati in ISO-8859-1 (in realtà non ho eseguito il test ma sono sicuro che non vengano copiati in UTF-8).
La mia soluzione sta dichiarando due sezioni <resource>. Uno per includere tutti i file che è necessario filtrare. L'altro per copiare altre risorse con <filtering> impostato su false.
Funziona per me perché non è necessario filtrare i file I18N e il file che deve essere impostato come valore quando build contiene solo caratteri ASCII.

0

In Windows> Preferenze> Generale> Spazio di lavoro è presente un pulsante di opzione per "Codifica file di testo". Avevo impostato UTF-8 e stava infrangendo tutti i miei caratteri speciali nel codice.

come predefinito in Windows è "Cp1252", penso.

Problemi correlati