2010-06-10 56 views
277

當我在我的多模塊Maven項目運行maven install我總是得到以下輸出:如何在Maven中配置編碼?

[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent! 

所以,我逛了一下google搜索,但所有我能找到的是,我來補充:

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 

...到我的pom.xml。但它已經在那裏(在父母pom.xml)。

爲maven-resources-plugin或maven-compiler-plugin配置<encoding>也沒有修復它。

那麼問題是什麼?

+1

要小心,UTF-8編碼就是你實際上想要指定的編碼。使用更簡單的編碼(如ISO-8859-1(又名拉丁文-1)甚至US-ASCII)可能會更好。 – rmp 2013-01-14 18:23:23

+21

「你可能更適合使用更簡單的編碼,比如......」 是的,還有bug最終用戶以及其他開發人員......現在最好儘量使用UTF-8,只有在多重編碼應用程序需求被拋出時,才關心其他編碼。在這裏,我們主要討論的是源代碼和配置文件的編碼,用戶輸入的編碼是以不同的方式進行管理的(使用'java -Dfile.encoding ...'並伴隨着許多痛苦的編程工作)。 – zakmck 2013-08-23 09:32:47

+0

我個人認爲編碼問題非常難以理解,因此我在pom.xml中編碼了ASCII,然後提前編碼問題。這自然是由於我的名字中有一個非ASCII字符,從第1天開始給出問題:) – 2014-05-09 15:49:37

回答

435

好的,我發現了這個問題。

我使用一些報告插件。在我發現的故障安全-maven插件(http://maven.apache.org/plugins/maven-failsafe-plugin/integration-test-mojo.html)的文檔中,<encoding>配置 - 當然 - 默認使用${project.reporting.outputEncoding}。所以我加了屬性作爲project元素的子元素,現在一切正常:

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
</properties> 

http://maven.apache.org/general.html#encoding-warning

+0

所以我有這個問題,我加入了性能上面是這樣的: \t \t \t \t \t \t \t \t \t 真正 \t \t \t \t \t \t 地方 \t \t \t \t \t \t \t https://earneventapi.intra1.e1.v2.epaas.aexp.com \t \t \t \t UTF-8 \t \t \t \t UTF-8 \t \t \t \t \t 2017-03-02 16:20:46

32

見這將是除以前​​,如果有人會見斯堪字母的問題這是解決上述解決方案。

如果java源文件包含scandic字母,則需要通過用於編譯的Java正確解釋。 (例如常量中使用的scandic字母)

即使文件存儲在UTF-8中,且Maven配置爲使用UTF-8,Maven使用的System Java仍將使用系統默認值(例如。in Windows:cp1252)。

這將是可見僅在運行通過行家(可能是打印這些常量的值在測試中。打印出的斯堪的字母將顯示爲「<?>」) 測試如果沒有很好的測試,這會破壞類文件作爲編譯結果並且不被注意。

爲防止出現這種情況,您必須設置用於編譯的Java以使用UTF-8編碼。 這是不夠的,在Maven pom.xml中編碼設置,需要設置環境變量: JAVA_TOOL_OPTIONS = -Dfile.encoding = UTF8

此外,如果在Windows中使用Eclipse,您可能需要設置除此之外的編碼(如果您通過eclipse運行單個測試)。

+2

成千上萬的你,雖然maven-pom的方式來糾正這將獲得數百萬 – Whimusical 2015-03-09 16:44:39

+0

不知道是否有一種maven的方式來做到這一點,因爲這是一個JVM設置,而不是Maven。 – 2015-04-02 04:45:25

+3

我認爲你在混合東西。如果您在Java中使用I/O而不顯式指定編碼(不推薦),則只需設置'-Dfile.encoding'。我沒有看到這與Java源文件中的scandic字母有什麼關係。正如Ethan Leroy的回答中所述,當「project.build.sourceEncoding」設置正確時,Java源文件中的非ASCII可與Maven一起使用。 – sleske 2015-07-07 12:12:43

4

試試這個:

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

特別重要的是,我們不應該忘記,不僅源,而且資源都需要這種編碼設置。 – peterh 2017-03-23 15:37:24

16

如果結合上述問題的答案,終於是配置爲UTF-8的pom.xml似乎應該這樣。

pom。XML

<?xml version="1.0" encoding="UTF-8"?> 
<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"> 

    <modelVersion>4.0.0</modelVersion> 

    <groupId>YOUR_COMPANY</groupId> 
    <artifactId>YOUR_APP</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 

    <properties> 
     <project.java.version>1.8</project.java.version> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
    </properties> 

    <dependencies> 
     <!-- Your dependencies --> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.7.0</version> 
       <configuration> 
        <source>${project.java.version}</source> 
        <target>${project.java.version}</target> 
        <encoding>${project.build.sourceEncoding}</encoding> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-resources-plugin</artifactId> 
       <version>3.0.2</version> 
       <configuration> 
        <encoding>${project.build.sourceEncoding}</encoding> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 
+1

最後很棒的pom模板 – 2016-11-10 16:00:39