How to put a directory first on the classpath with Spring Boot?
我正在使用 Maven 构建我的 Spring Boot 应用程序,因此我可以使用以下命令启动它:
1
| java -jar myjar-1.0-SNAPSHOT.jar --spring.profiles.active=prod |
我想在类路径上首先有一个目录,这样我就可以在文件系统上放置一些文件,而不必解压缩 jar 来更改它们。
我尝试过使用 loader.path,但它似乎不起作用。
1
| java -Dloader.path="config/*" -jar myjar-1.0-SNAPSHOT.jar --spring.profiles.active=prod |
config 目录是 jar 所在位置的子目录。我正在尝试加载在我的应用程序中作为 Resource 注入的密钥库文件。在 src/main/resources 中有这样一个文件,但它只在我的 IDE 中有效,在打包为 jar 时无效。所以我想先在类路径中放置一个文件,以便在类路径中首先找到该文件。
您可以使用 loader.path,但前提是 Main-Class 是 PropertiesLauncher(因此这取决于您如何构建 JAR 文件)。也许您需要在 Boot 插件中使用 packaging=ZIP 重新构建 JAR(例如此处的文档)?您不能将密钥库的路径设置为"文件:"URL 吗?
- 使用 file: 确实可以修复它,我可以将其用作解决方法。但是,在 Maven 插件中使用 <layout>ZIP</layout> 并没有将它放在类路径中,我真的很想让它工作。当我添加 loader.path 时,我得到了 NoClassDefFoundError: org/springframework/transaction/PlatformTransactionManager
-
那是因为您要删除默认的 loader.path。您将需要 "loader.path=lib/,config/" 来同时使用两者。
-
实际上反过来(假设你要求 "config/" 是第一个)。
-
啊!我认为 loader.path 是在类路径上添加额外的东西。
-
Spring Boot 是否提供了某种方式来将项目添加到类路径,而不是像设置 loader.path 时那样完全替换它?
-
不。但是如果默认是一个目录,那么重新添加它几乎没有困难,是吗?
-
面临类似的问题。在 Maven 插件中使用 <layout>ZIP</layout> 解决了这个问题。谢谢!