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 目录。[这是乏味且 奇怪的解决方案]。
但它对我来说非常有用。
我的 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 目录。[这是乏味且 奇怪的解决方案]。 但它对我来说非常有用。