2013-03-05 104 views
1

我有一個外部groovy腳本,需要通過maven assembly插件將其包含在zip文件中。帶unicode字符的Maven assembly插件

我不能只編譯它,它需要以文本形式。 我面臨的問題是腳本包含字符,這是一些問題。 腳本本身從Maven項目中的位置運行文件,但是當我將它與Maven Assembly插件打包在一起,然後解壓縮它時,它的非ascii字符已損壞。如果我使用7zip或類似的東西壓縮和解壓縮,腳本也可以正常運行,不會發生損壞。

我該如何告訴maven assembly插件來保存我的特殊字符?我真的很討厭必須對代碼進行很多修改才能將其轉換爲Maven項目。

這裏是我的POM

 <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.4</version> 
     <configuration> 
      <encoding>UTF-8</encoding> 
      <descriptors> 
       <descriptor>src/main/assembly/archive.xml</descriptor> 
      </descriptors> 
     </configuration> 
     <executions> 
      <execution> 
       <id>make-assembly</id> 
       <phase>package</phase> 
       <goals> 
        <goal>single</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 

的一部分,我的描述

<id>archive</id> 
    <baseDirectory>/</baseDirectory> 
    <formats> 
    <format>zip</format> 
    </formats> 
    <fileSets>  
... 
    <fileSet> 
     <lineEnding>unix</lineEnding> 
     <directory>src/main/groovy</directory> 
     <outputDirectory>/</outputDirectory> 
     <includes> 
      <include>BusinessServiceMock.groovy</include> 
     </includes> 
    </fileSet> 
... 

回答

0

是這樣的:

<configuration> 
    <encoding>UTF-8</encoding> 

絕對正確的字符編碼爲你的腳本?

1

經過3個小時的深入搜索,我遇到了同樣的問題。我發現使用maven-antrun-plugin而不是maven-assembly-plugin的另一種替代方案,因爲它並不建議在zip壓縮文件中對文件名進行編碼。

這裏是我的解決方案:

1.Firstly,以確保文件名是UTF-8編碼例如,複製我的ressource到項目構建庫,並迫使輸入和輸出的編碼。

2.然後通過添加複製的目標目錄來創建我的zip

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

... 

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.8</version> 
    <executions> 
     <execution> 
      <phase>prepare-package</phase> 
      <configuration> 
       <encoding>${project.build.sourceEncoding}</encoding> 
       <tasks> 
        <copy todir="${project.build.directory}/target" 
          includeemptydirs="true" 
          encoding="${project.build.sourceEncoding}" 
          outputencoding="${project.build.sourceEncoding}"> 
         <fileset dir="${basedir}/src/resource"> 
          <include name="**/*" /> 
         </fileset> 
        </copy> 
        <zip destfile="${project.build.directory}/${project.artifactId}-${project.version}.zip" 
         encoding="${project.build.sourceEncoding}"> 
         <zipfileset dir="${project.build.directory}/target" includes="**" /> 
        </zip> 
       </tasks> 
      </configuration> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

爲了確保編碼也可以,你可以用maven-enforcer-plugin檢查子文件夾和文件的編碼。

相關問題