首页 > 解决方案 > 使用 -Dloader.path= 运行 jar 有效,但不是 application.properties loader.path

问题描述

我在 /config/application.properties 下有一个外部属性文件,我从中检索属性。当我运行我的 jar 时,它能够从中获取某些属性(例如 server.port=8083)

这是我的文件/文件夹的结构:

ProjectFolder
 |
 +-- mytool.jar
 |    
 +-- config
 |  |  
 |  +-- application.properties
 |    
 +-- lib
 |  |  
 |  +-- externalJar.jar

现在,问题是我需要来自外部属性文件的属性“loader.path”,当我运行 jar 时,所有其他属性都被正确加载,除了 loader.path:

java -jar mytool.jar

在外部 application.properties 内部包含:

spring.servlet.multipart.enabled=false
server.port = 8083
logging.file = /someplace/
loader.path=lib

由于它没有加载 externalJar.jar,我遇到了 classNotFoundExceptions。

然而,奇怪的是,当我启动应用程序时:

java -Dloader.path=lib -jar mytool.jar

一切都按预期工作。

我是否缺少 application.properties 文件的某些内容?我尝试使用完整路径:

loader.path=/home/me/ProjectFolder/lib

但这也没有用。我确信正在读取 application.properties,因为启动时显示的 server.port 号是我特别指定的。

我已将项目更改为在 Maven 中使用 PropertiesLauncher。清单文件

Manifest-Version: 1.0
Implementation-Title: mytool
Implementation-Version: 0.0.1-SNAPSHOT
Built-By: giraffepoo
Implementation-Vendor-Id: com.sap
Spring-Boot-Version: 2.1.3.RELEASE
Main-Class: org.springframework.boot.loader.PropertiesLauncher
Start-Class: com.sap.mytool
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_201
Implementation-URL: https://projects.spring.io/spring-boot/#/spring-bo
 ot-starter-parent/mytool

如果有人能指出我正确的方向,非常感谢您的帮助。谢谢!

注意:不确定是否相关,但 externalJar.jar 在应用程序启动时立即使用覆盖方法:contextInitialized

标签: javaspringspring-bootjar

解决方案


我知道有一个老问题,但仍然没有答案。我认为问题在于loader.path应该在独立loader.properties文件中提供该属性。如文档中所述

另请记住,它仅适用于PropertiesLauncher,不适用于JarLauncheror WarLauncher


推荐阅读