带有unicode字符的Maven程序集插件

时间:2013-03-05 09:13:40

标签: maven unicode maven-assembly-plugin

我有一个外部groovy脚本,我需要通过maven程序集插件包含在zip文件中。

我不能只编译它,它需要是文本形式。 我面临的问题是该脚本包含æøå字符,这会导致一些问题。 脚本本身从maven项目中的位置运行文件,但是当我使用maven程序集插件打包它,然后解压缩它时,其非ascii字符已损坏。如果我使用7zip或类似的方式压缩和解压缩脚本,脚本也运行正常,不会发生损坏。

如何告诉maven程序集插件保存我的特殊字符?我真的很讨厌必须对代码进行大量更改才能将其转换为maven项目。

这是我朋友的一部分

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

2 个答案:

答案 0 :(得分:3)

经过3个小时的深度搜索,我遇到了同样的问题。我找到了使用maven-antrun-plugin而不是maven-assembly-plugin的另一种方法,因为它根本不建议对zip存档中的文件名进行编码。

这是我的解决方案:

1.首先,为确保文件名以UTF-8编码为例,我将我的资源复制到项目构建存储库并强制输入和输出编码。

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检查子文件夹和文件编码。

答案 1 :(得分:0)

这是:

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

你的脚本肯定是正确的字符编码吗?