未加载类路径上的 JAR 的原因

Reasons why a JAR on classpath not loaded

我有一个 运行 的 SpringBoot 应用程序,其命令为 java -classpath <longlist of JARs> com.example.MyApp

我有 JAR 的路径 - 在本例中为 liquibase-core-4.4.0.jar - 在 class 路径上指定。但是,应用程序在启动时抱怨缺少 class 定义。

附加调试器我可以看到 URLClassPath 在其 path 列表中确实有这个 JAR。但是,没有加载程序。

什么会导致 JAR 在 class路径上但没有加载程序?

Spring 引导应用程序具有非常聪明的 class 路径搜索系统,例如它在 BOOT-INF/lib 中找到 jar - 这是常规 java 系统无法找到的做。因此 spring 为此目的定制了 class 个加载程序。

现在可以借助 LOADER_PATH 环境变量或 loader.path 参数添加外部 jar。

最重要的是,不要使用“标准”java 机制,考虑使用“特殊”spring 引导机制。

Read the official documentation具体例子