我有一个创建可执行 fat 的 Spring Boot Maven 项目.war。我可以毫无问题地运行它.war,java -jar因为所有依赖项都位于 far .war.
但是,我无法使用 Spring Boot Devtools 运行该项目,mvn spring-boot:run因为它无法在运行时找到一些依赖项并引发未处理的异常。
例如,我们有一个间接依赖jaxb-runtime-2.3.1.jar,它又依赖于jaxb-api.2.3.1.jar. 两者.jars都存在于脂肪中,.war但如果我用mvn spring-boot:run它运行项目可以找到jaxb-runtime好的但找不到jaxb-api消息:
java.nio.file.NoSuchFileException: ~/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.1/jaxb-api-2.3.1.jar
注意,jaxb-api-2.3.1.jar存在于 Maven 缓存中:
~/.m2/repository/javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1.jar
但是,它似乎正在与jaxb-runtime-2.3.1.jar位于以下位置的父级相同的位置寻找它:
~/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.1/
有一长串类似的例外遵循这种模式。这是一个相当大的项目,但这里有一些我们正在使用的版本:
Spring Boot: 2.1.9.RELEASE
spring-boot-maven-plugin: 2.1.9.RELEASE
maven-compiler-plugin: 3.8.1
spring-boot-devtools: not specified in pom
为什么不spring-boot:run以与 maven 构建相同的方式定位依赖项?我如何指示它在哪里找到这些依赖项?