我在句子算法之间创建了自定义语义相似度。项目创建了65535个条目jar,因为它包含100,000个单词。我使用“mvn install:install-file”将自定义jar添加到我的spring启动项目并创建了启动jar,但每当我运行项目时我都会收到此错误。
Exception in thread "main" java.lang.IllegalStateException: Failed to get nested archive for entry BOOT-INF/lib/semantics-1.0.jar
at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:109)
at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchives(JarFileArchive.java:87)
at org.springframework.boot.loader.ExecutableArchiveLauncher.getClassPathArchives(ExecutableArchiveLauncher.java:72)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:49)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: java.io.IOException: Unable to open nested jar file 'BOOT-INF/lib/semantics-1.0.jar'
at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:252)
at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:237)
at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:104)
... 4 more
Caused by: java.lang.IllegalStateException: Zip64 archives are not supported
at org.springframework.boot.loader.jar.CentralDirectoryEndRecord.getNumberOfRecords(CentralDirectoryEndRecord.java:124)
at org.springframework.boot.loader.jar.JarFileEntries.visitStart(JarFileEntries.java:91)
at org.springframework.boot.loader.jar.CentralDirectoryParser.visitStart(CentralDirectoryParser.java:88)
at org.springframework.boot.loader.jar.CentralDirectoryParser.parse(CentralDirectoryParser.java:56)
at org.springframework.boot.loader.jar.JarFile.<init>(JarFile.java:118)
at org.springframework.boot.loader.jar.JarFile.<init>(JarFile.java:106)
at org.springframework.boot.loader.jar.JarFile.createJarFileFromFileEntry(JarFile.java:290)
at org.springframework.boot.loader.jar.JarFile.createJarFileFromEntry(JarFile.java:260)
at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:248)
... 6 more
答案 0 :(得分:2)
Spring启动不会支持jar中超过65534个文件。这是他们的代码。
public int getNumberOfRecords() {
long numberOfRecords = Bytes.littleEndianValue(this.block, this.offset + 10, 2);
if (numberOfRecords == 0xFFFF) {
throw new IllegalStateException("Zip64 archives are not supported");
}
return (int) numberOfRecords;
}
由于它的数据文件,将它保存在jar之外,这也将减少构建时间。
答案 1 :(得分:1)
请参阅https://github.com/spring-projects/spring-boot/issues/2895
关键错误是:
Caused by: java.lang.IllegalStateException: Zip64 archives are not supported
55mb不需要Zip64格式,您可能应该更改创建文件的方式。
答案 2 :(得分:1)
Spring boot 2.2将支持zip64 jar Github issue
答案 3 :(得分:0)
我知道这不是一个好习惯但是我的spring项目现在运行正常,因为我将我的依赖项整个包包含到spring项目中,而不是创建一个依赖项的jar然后导入它。