(我最初将其发布在Gradle Forum中,但由于我认为SO具有更高的可见性,因此我在此处进行了复制)。
在从jHipster框架派生的项目中,我无法执行从 bootRepackage 生成的 war 。该主题仍在Stackoverflow中打开。
我创建了一个小应用程序并将其放在Github上,以帮助您解决这个问题。按照这些步骤,我相信您也可以重现该问题。我首先打包一个简单的Spring应用程序,然后运行生成的war。这将在资源文件夹中创建66000个文件。再次打包相同的应用程序将失败,因为第二次有超过65535个文件。我们通过清理资源文件夹并再次成功重新引导它来确认这一点。
然后,我将 zip64 属性设置为 true (我也必须在jar {}任务中进行此操作。但是在我的原始应用程序中,我没有jar任务,仅在war任务中进行了设置)。 bootRepackage任务成功完成,但是当我进行 war 时,我得到,没有Start-Class错误。
第一次运行此命令将起作用,因为文件总数
第二次运行此命令将不起作用,因为文件总数> 65535并且zip64 = false
第三次运行此命令(等于替代方法)将起作用,因为文件总数
至此,我们的文件总数> 65535,并且zip64 = false。我们将zip64属性更改为true,然后尝试再次将其打包
java.lang.IllegalStateException: No 'Start-Class' manifest entry specified in jar:file:../boot-repackage-test/build/libs/app-0.1-SNAPSHOT.war!/
at org.springframework.boot.loader.archive.Archive.getMainClass(Archive.java:57)
at org.springframework.boot.loader.ExecutableArchiveLauncher.getMainClass(ExecutableArchiveLauncher.java:69)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:61)
at org.springframework.boot.loader.WarLauncher.main(WarLauncher.java:61)
最后,
unzip app-0.1-SNAPSHOT.war && cat META-INF/MANIFEST.MF
产生:Manifest-Version: 1.0
Start-Class: org.Application
Spring-Boot-Version: 1.2.3.RELEASE
Main-Class: org.springframework.boot.loader.WarLauncher
最好的祝福,
佩德罗·杜索(Pedro Dusso)
最佳答案
Spring Boot可执行JAR当前不支持zip64格式。我建议尝试重组您的应用程序,以便将 Assets 打包到不同的嵌套JAR(具有Gradle shadow plugin重新打包您的应用程序。