java: 目标文件夹中的 Zip 文件大小大于资源中的原始大小,不会解压缩

java: Zip file size in target folder is bigger than original size in resources, won't unzip

我的 java 项目的 main/resources 中有一个 672 字节的 zip 文件。

但是,当项目构建时,target/classes 中的相同文件现在变成了 1.10 KB 的 zip 文件。

当我的代码试图解压缩它时,出现错误:

java.util.zip.ZipException: invalid code lengths set
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:164)
at java.util.zip.ZipInputStream.read(ZipInputStream.java:194)
at java.io.FilterInputStream.read(FilterInputStream.java:107)

我认为问题出在目标问题中文件较大,因为我在其他项目中使用我的解压缩功能没有任何问题。 我不知道是什么造成的以及如何解决它? 也不确定你需要什么信息来帮助我?我正在使用 Spring 和 Maven,以及 JDK 1.8.0_45

在我的 pom.xml 文件中删除这段代码成功了:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <configuration>
                specify UTF-8, ISO-8859-1 or any other file encoding
                <encoding>UTF-8</encoding>
                <escapeString>\</escapeString>
            </configuration>
        </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

现在目标文件夹中的zip文件大小相同,可以解压了。

问题解决了,但我不太明白那里发生了什么...!

问题来自您 pom.xml

中的以下设置组合
<filtering>true</filtering>

这指示 maven 替换资源文件中的变量(参见:Maven Resources Filtering)。

正如您还指示 Maven 编写以 UTF-8 编码的资源文件(参见:Maven Resources encoding)。

<encoding>UTF-8</encoding>

ZIP 文件(二进制文件)将以 UTF-8 编码写入,这会造成内容乱码。

如果您使用 LATIN-1 作为编码,它会起作用

<encoding>ISO-8859-1</encoding>

取决于您自己的回答。由于您似乎既没有在资源文件中使用 UTF-8 编码,也没有使用变量过滤,因此删除资源插件和过滤指令是您的解决方案。

编辑 如果由于某种原因您不能使用此编码,您可以根据文件的扩展名从过滤中排除文件。

<artifactId>maven-resources-plugin</artifactId>
...
<configuration>
    <encoding>UTF-8</encoding>
    <escapeString>\</escapeString>
    ...
    <nonFilteredFileExtensions>
        <nonFilteredFileExtension>zip</nonFilteredFileExtension>
    </nonFilteredFileExtensions>
</configuration>

当我使用命令 "mvn clean package or install" 构建 jar 时。我遇到了这个问题。 "invalid code lengths set" 和编译错误 我在奇怪的问题上挣扎。我尝试了 POM.xml.

中所有建议的解决方案

但最后我删除了大小超过 3 GB 的 .m2 目录。[这是乏味且 奇怪的解决方案]。 但它对我来说非常有用。