0

我有一个非常大且正在运行的 Spring Boot 项目,该项目在 Boot 1.4.2 上运行良好。当我尝试升级到 1.5.3 时,它可以在我的 IDE(Intellij Idea)上运行,但在部署时不起作用。这是一个 Maven 项目,所以我使用“package”指令生成一个 WAR 文件,但在部署时出现以下错误。据我所知,它说 WAR 上缺少某些东西,但我什至检查了它并且文件在那里......有什么想法吗?

Caused by: java.io.FileNotFoundException: file:(...)/target/ultraip-intranet-2.0-RELEASE.war*/WEB-INF/classes/com/ultraip/intranet/entities (No such file or directory)
    at java.util.zip.ZipFile.open(Native Method) ~[na:1.8.0_131]
    at java.util.zip.ZipFile.<init>(ZipFile.java:219) ~[na:1.8.0_131]
    at java.util.zip.ZipFile.<init>(ZipFile.java:149) ~[na:1.8.0_131]
    at java.util.jar.JarFile.<init>(JarFile.java:166) ~[na:1.8.0_131]
    at java.util.jar.JarFile.<init>(JarFile.java:103) ~[na:1.8.0_131]
    at org.springframework.core.io.support.PathMatchingResourcePatternResolver.doFindPathMatchingJarResources(PathMatchingResourcePatternResolver.java:593) ~[spring-core-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
    at org.springframework.core.io.support.PathMatchingResourcePatternResolver.findPathMatchingResources(PathMatchingResourcePatternResolver.java:475) ~[spring-core-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
    at org.springframework.core.io.support.PathMatchingResourcePatternResolver.getResources(PathMatchingResourcePatternResolver.java:279) ~[spring-core-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
    at org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.buildDefaultPersistenceUnitInfo(DefaultPersistenceUnitManager.java:525) ~[spring-orm-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
    ... 105 common frames omitted

生成的 WAR 文件截图 http://imgur.com/a/5aORQ

4

1 回答 1

2

在 Tomcat 中进行了更改,现在它使用 a作为URL*中的分隔符。war:file:这破坏了 Spring Framework 的资源解析,其中*被错误地解释为通配符。

该问题应该已在 Spring Boot 1.5.3 中使用的Spring Framework 4.3.8中得到解决,但您似乎发现了一个未考虑的案例。你能用一个重现问题的小样本打开一个 Spring Boot 问题吗?

将应用程序打包为 jar 文件时不会出现问题,因为这会阻止 Tomcatwar:file:为资源生成 URL。

于 2017-04-29T06:32:12.737 回答