2013-01-14 36 views
7

我正在開發一個基於maven的web項目。在我的Web模塊中,我使用不同的語言特定資源包(德語,西班牙語,...)。 我所有的來源都是基於UTF-8的,而且一切都很好。 現在有必要acitvate maven資源過濾來取代一些配置取決於不同的maven配置文件。激活資源過濾後錯誤的編碼

我的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> 
.... 

從這一刻起我的戰爭文件包含錯誤的編碼資源包。例如德語變音不再正確顯示在我的Web應用程序中。 當我禁用資源過濾時,一切都很順利。

我發現的唯一的解決辦法是設置該屬性project.build.sourceEncoding以「ISO-8859-1」

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

但我不明白爲什麼這是必要的嗎?我的所有來源都是UTF-8,而且我的應用程序基於UTF-8? 如果我需要添加資源包(例如日文字符),會發生什麼情況?

我在Linux上使用Eclipse 4.2和Maven 3

+0

你使用的是maven-war-plugin(和哪個版本)? – ben75

+0

我沒有明確配置maven-war-plugin。但是當我添加它時編碼出錯了。 – Ralph

回答

4

您可以指定在資源編碼插件配置,像這樣發展:

<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

我打算建議一樣! – carlspring

+2

我已經測試過,但沒有效果。 – Ralph

+0

這裏同樣的問題。你最終做到了嗎? – Sloy

0

不是一個真正的回答你問題(對不起),但我認爲這是有用的信息關於屬性project.build.sourceEncoding

此屬性是一個嘗試簡化maven項目中的編碼管理。

這個想法是所有的插件都使用它作爲默認編碼值,只要編碼沒有在它自己的插件配置中指定。 使用或不使用此屬性作爲默認編碼值只是插件開發人員的建議。

,我認爲這是在所有主要的和最新的插件完成的,但一個重要的例外是之前版本的Maven的戰爭插件2.2

來源:

  • 討論有關project.build.sourceEncodinghere
  • war-plugin的編碼細節是here
+0

感謝您的信息。但它說實際版本2.3中的war-plugin在過濾資源時會考慮屬性project.build.sourceEncoding。但這似乎不適合我。只有當我將project.build.sourceEncoding設置爲ISO-8859-1時,德語變音符才被正確綁定到我的戰爭中。 – Ralph

3

您確定您的資源包(.properties)正在使用UTF-8嗎?

java.util.Properties承擔ISO-8859-1資源包編碼,見http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html#load(java.io.Reader),我想的Eclipse(和IntelliJ IDEA的)榮譽,這些文件(的.properties)這個默認的編碼。

因此,請使用文本編輯器檢查項目源樹中這些文件的當前編碼,在Windows中記事本2可以幫助您解決這個問題。

,然後配置maven-resources-plugin喜歡這裏表示Configure encoding for different filetypes in maven?

1

今天我有同樣的問題。將project.build.sourceEncoding設置爲UTF-8將不起作用。所有過濾的文件將被複制到ISO-8859-1(實際上我沒有測試,但我確定它們沒有被複制到UTF-8中)。
我的解決方案是聲明兩個<resource>部分。一個包含你真正需要過濾的所有文件。另一個將其他資源複製爲<filtering>設置爲false。
它適用於我,因爲我不需要過濾I18N文件和需要設置的值,當構建包含只有ASCII字符的值。

0

在Windows>首選項>常規>工作區中,有一個用於「文本文件編碼」的單選按鈕。我有UTF-8集,它破壞了我所有的代碼中的特殊字符。

作爲默認在Windows它是「Cp1252」我認爲。