(我最初将其发布在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重新打包您的应用程序。

08-05 21:27