Spring 获得;无法打开嵌套的压缩项";使用WarLauncher在servlet容器外执行war文件时

Spring 获得;无法打开嵌套的压缩项";使用WarLauncher在servlet容器外执行war文件时,spring,jar,war,executable-jar,spring-boot,Spring,Jar,War,Executable Jar,Spring Boot,我正在实现一个war文件,它应该以两种不同的方式支持执行: 在Servlet容器内部-通过在Tomcat或Jetty中部署它 外部Servlet容器-从命令提示符执行它,而不使用任何嵌入式Servlet容器。这需要作为war文件的一部分得到支持 我发现Spring引导加载程序组件与实现#2更相关。在与Maven集成之前,我尝试手动使用它。我遵循了文档中提到的“WAR文件结构”一节。请参阅“WAR文件结构”一节 我遵循以下步骤。我创建了war文件。我解压缩了它,然后在它的根目录下添加了所有的spr

我正在实现一个war文件,它应该以两种不同的方式支持执行:

  • 在Servlet容器内部-通过在Tomcat或Jetty中部署它
  • 外部Servlet容器-从命令提示符执行它,而不使用任何嵌入式Servlet容器。这需要作为war文件的一部分得到支持
  • 我发现Spring引导加载程序组件与实现#2更相关。在与Maven集成之前,我尝试手动使用它。我遵循了文档中提到的“WAR文件结构”一节。请参阅“WAR文件结构”一节

    我遵循以下步骤。我创建了war文件。我解压缩了它,然后在它的根目录下添加了所有的spring引导加载程序类文件。我在清单文件中添加了适当的条目,以使war可执行。然后将其压缩并重新命名回原始war文件。当我使用命令-Java-jar mywar.war执行它时,它失败了,出现以下异常:

    java.lang.IllegalStateException: Unable to open nested compressed entry WEB-INF/lib/spring-core-3.1.2.RELEASE.jar
        at org.springframework.boot.loader.jar.JarFile.getNestedJarFileFromFileEntry(JarFile.java:330)
        at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:305)
        at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:87)
        at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchives(JarFileArchive.java:74)
        at org.springframework.boot.loader.ExecutableArchiveLauncher.getClassPathArchives(ExecutableArchiveLauncher.java:78)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:52)
        at org.springframework.boot.loader.WarLauncher.main(WarLauncher.java:79)
    
    它不仅给出了特定jar的错误,而且给出了所有jar文件的错误。我想,当我用Maven自动化上述步骤时,它也会失败


    谢谢。

    底层ZIP文件格式存在一些限制,使得
    WarLauncher
    (和朋友)无法从嵌套的压缩存档加载资源。然而,在构建WAR文件时,您需要重新执行该步骤,并确保嵌套的JAR不会被压缩。那么它应该会起作用。(如果您对Maven WAR构建使用默认设置,它也会工作。)

    是因为我在手动解压缩吗?如果我在创建war文件时在预打包阶段添加加载程序类,它会起作用吗?我如何手动修复它?您是如何创建WAR文件的?导致问题的是
    WEB-INF/lib
    中的JAR文件。可能您用来创建这些条目的任何工具都有一个不压缩它们的选项?我使用的是windows 7提供的压缩,没有使用任何这样的工具。它不提供任何您指定不压缩的GUI。它在抱怨没有找到神器。引导加载程序的组和工件id是否正确。对于这个评论来说,xml是巨大的。需要提出一个不同的问题。Windows原生ZIP工具都是垃圾。如果您需要手动执行此操作,您可以尝试其他工具(例如7Zip)。为什么你需要手动操作呢?使用Maven来构建您的战争不是更容易吗?