Maven汇编插件与Unicode字符

3
我有一个外部的Groovy脚本,需要通过Maven Assembly插件将其包含在zip文件中。我不能只是编译它,它必须以文本形式存在。我面临的问题是脚本包含一些特殊字符(如æ、ø、å),这导致了一些问题。脚本本身从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>
...
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接