从Spring Boot 1.3.7升级到1.4.0后,我们无法再使用Spring Boot Maven插件作为单个jar构建来启动应用程序。我们的应用程序是一个使用Jersey和Jetty的小型REST接口。我们使用Maven,我们的pom文件是非常标准的Spring Boot。
我们仍然可以使用mvn spring-boot:runEclipse和从Eclipse中运行应用程序,但是当作为一个jar运行时,Jersey ResourceFinder抱怨找不到它.jar!/BOOT-INF/classes。
mvn spring-boot:run
ResourceFinder
.jar!/BOOT-INF/classes
当我打开jar的包装时,该文件夹BOOT-INF/classes存在,并且包含预期的类和资源。
BOOT-INF/classes
任何帮助表示赞赏。
2016-08-10 14:58:31.162 ERROR 16071 --- [ main] o.s.boot.SpringApplication : Application startup failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jerseyConfig' defined in URL [jar:file:/acmesource/acme/acme-core/acme-core-api/target/acme-core-api-0.1 SNAPSHOT.jar!/BOOT-INF/classes!/com/acme/core/api/JerseyConfig.class]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.acme.core.api.JerseyConfig]: Constructor threw exception; nested exception is org.glassfish.jersey.server.internal.scanning.ResourceFinderException: java.io.FileNotFoundException: /acmesource/acme/acme-core/acme-core api/target/acme-core-api-0.1-SNAPSHOT.jar!/BOOT-INF/classes (No such file or directory)
从Spring Boot 1.4发行说明中:
可执行jar布局的更改意味着,Jersey的类路径扫描中的限制现在会影响可执行jar文件以及可执行war文件。要变通解决此问题,您希望Jersey扫描的类应打包在一个jar中,并作为一个依赖项包含在中BOOT- INF/lib。然后,应将Spring Boot启动器配置为在启动时解压缩这些jar,以便Jersey可以扫描其内容。
BOOT- INF/lib