我有一个创建可执行 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 构建相同的方式定位依赖项?我如何指示它在哪里找到这些依赖项?