【发布时间】:2016-12-06 11:58:03
【问题描述】:
我有一个 Spring Boot 应用程序,它允许从类路径加载其他组件(如果它们是我的应用程序中定义的接口的子类)。这在 Spring Boot 1.3.8 中效果很好,但是我想升级到 Spring Boot 1.4.2 但new layout of executable JARs 会导致一些问题。
当我现在在类路径上使用附加的 JAR 运行我的应用程序时,我得到了一个 ClassNotFoundException 用于我试图子类化的接口。这向我表明,虽然应用程序知道我的类在 BOOT-INF 中的位置,但因为它们不在标准位置,所以其他组件找不到它们。
有人知道如何解决这个问题吗?
我在 spring-boot-maven-plugin 中尝试了不同的布局选项,但它们似乎都没有做我想要的。
【问题讨论】:
-
通过
loader.path应用程序属性而不是JVM选项-cp设置类路径。 -
我已经尝试过了,但是组件扫描似乎没有拾取附加 JAR 中的组件(我无法判断组件是否可以找到接口,因为它们不是被捡起来检查!)。我尝试在命令行 (
-Dloader.path=...) 和 application.properties 上设置它,但在这两种情况下它都没有选择我的其他组件。 -
您是否以正确的格式设置了
loader.path?它是一个逗号分隔的列表,不像 java-cp使用:或;作为取决于操作系统的分隔符。 -
是的,我尝试了一个 JAR,其路径相对于我正在运行的目录。
-
对不起,您必须明确指定
ProperitesLauncher才能生效。尝试将命令从java -Dloader.path=... -jar myjar.jar更改为java -Dloader.path=xxx -Dloader.debug=true -cp myjar.jar org.springframework.boot.loader.PropertiesLauncher。
标签: java spring-boot