gpt4 book ai didi

spring-boot - 从 Spring Boot 1.3.7 升级到 1.4.0 后单 jar 启动失败

转载 作者:行者123 更新时间:2023-12-04 06:33:09 25 4
gpt4 key购买 nike

从 Spring Boot 1.3.7 升级到 1.4.0 后,我们不能再使用 Spring Boot Maven 插件将应用程序作为单个 jar 构建启动。我们的应用程序是一个使用 Jersey 和 Jetty 的小型 REST 接口(interface)。我们使用 Maven,我们的 pom 文件是非常标准的 Spring Boot。

我们仍然可以使用 mvn spring-boot:run 运行应用程序并且在 Eclipse 中,但是当作为单个 jar 运行时 Jersey ResourceFinder提示找不到.jar!/BOOT-INF/classes .

当我解压 jar 时,文件夹 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)

最佳答案

只是另一种解决方案:

尽管 Jersey 无法扫描新版本的 fat boot jar 中的类,但您可以使用 Spring 类路径扫描工具实现相同的效果。这样您就可以像 ResourceConfig.packages() 一样扫描一个包。 :

ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
scanner.addIncludeFilter(new AnnotationTypeFilter(Provider.class));
scanner.addIncludeFilter(new AnnotationTypeFilter(Path.class));
config.registerClasses(scanner.findCandidateComponents("your.package.to.scan").stream()
.map(beanDefinition -> ClassUtils.resolveClassName(beanDefinition.getBeanClassName(), config.getClassLoader()))
.collect(Collectors.toSet()));

注:请看 org.glassfish.jersey.server.internal.scanning.AnnotationAcceptingListener的出处.这是库存解决方案,您可以看到它的作用相同:它扫描带有 @Path 注释的类或 @Provider (但由于扫描机制损坏,无法找到任何东西)。

顺便说一下 lanwen 贴的基于 bean 的方法可能更清楚 :) 添加 @Provider对此也是如此。

关于spring-boot - 从 Spring Boot 1.3.7 升级到 1.4.0 后单 jar 启动失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38875379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com