2016-10-17 28 views
2

我有一個java artifact爲IBM的大型機linux & dual-built,所有依賴shell腳本(在/ sbin目錄中)最初都是用ASCII編寫的,但是被複制到另一個目錄(在/ sbin-ebcdic中)。所以我配置Maven的資源 - 插件做到這一點對我來說:爲什麼maven-resources-plugin忽略我的字符集編碼設置?

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-resources-plugin</artifactId> 
      <version>3.0.1</version> 
      <executions> 
       <execution> 
        <id>copy-sbin</id> 
        <phase>process-resources</phase> 
        <goals> 
         <goal>copy-resources</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${project.basedir}/sbin-ebcdic</outputDirectory> 
         <resources> 
          <resource> 
           <directory>${project.basedir}/sbin</directory> 
          </resource> 
         </resources> 
         <encoding>IBM037</encoding> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

雖然它複製整個目錄,在其中的所有文件仍然在UTF-8編碼,好像我:

<encoding>IBM037</encoding> 

設置不存在。爲什麼maven-resources-plugin不能按預期運行?這是一個錯誤嗎?

+0

請注意,資源過濾被禁用,所以這個問題:http://stackoverflow.com/questions/14327003/wrong-encoding-after-activating-resource-filtering是圖片。 – tribbloid

回答

2

如果你仔細的resources:copy-resources閱讀文檔,它說,這大約<encoding>

字符編碼方案來過濾資源時應用。

如果你沒有進行過濾,resources插件將只是一個字節對每個字節的副本。如果您希望轉換爲使用指定編碼的資源,則即使您未使用屬性插值,也需要啓用篩選。

編輯:

我只是證實了它。當讀取寫入文件時,使用指定的編碼,這似乎違反直覺。如果你看看行144 DefaultMavenFileFilter.javamaven-resources-plugin:3.0.1依賴鏈:

143  fileReader = getFileReader(encoding, from); 
144  fileWriter = getFileWriter(encoding, to); 
145  Reader src = readerFilter.filter(fileReader, true, wrappers); 
146 
147  IOUtil.copy(src, fileWriter); 

當我改變了getFileWriter()的編碼UTF-8在調試時,它的工作正如人們所期望的那樣。

基本上,你有兩個選擇:

  • 編寫自己的插件。這種用例並不難。
  • 如果維護人員要引入<outputEncoding>配置參數,請提交改進憑單(我正在考慮自己做這件事情)。
  • 如果你在捏,創建你自己的插件分支。很明顯,如果你能將你的工作貢獻給主要的開發流程,那將是非常好的。
+0

在那裏試過, true under 複製的文件仍然是UTF-8。這也與http://stackoverflow.com/questions/14327003/wrong-encoding-after-activating-resource-filtering相矛盾。我否則完全同意你的文檔:) – tribbloid

+0

讓我回到你身邊,這真的應該工作 – Daniel

+0

我得到它的工作,有點。我在ISO-8859-1中有一個帶瑞典變音符號的文本文件,並使用你的配置使用UTF-8複製它。它顯然涉及文件,但結果並非我所期望的(它在應用文件時應用了UTF-8編碼)。我將在調試器中運行插件以查看發生了什麼。 – Daniel

相關問題