3

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

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

我如何告诉 maven 程序集插件来保存我的特殊字符?我真的很讨厌必须对代码进行大量更改才能将其转换为 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>
...
4

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

于 2017-09-29T14:53:38.200 回答