Java 如何修复maven依赖范围冲突(提供运行时编译)?

Java 如何修复maven依赖范围冲突(提供运行时编译)?,java,maven,pom.xml,exec-maven-plugin,Java,Maven,Pom.xml,Exec Maven Plugin,我有一个使用多个依赖项的项目。我习惯于在开发环境中使用 mvn compile exec:java -Dexec.classpathScope=compile -Dexec.mainClass="my.Main" 直到最近我开始使用一个依赖项(我们称之为a)来定义它自己在运行时范围内的依赖项,这个依赖项才工作得很好。它的一个运行时依赖项(我们称之为B)实际上是我的另一个依赖项的依赖项,我用提供的范围(我们称之为C)设置了它 所以我有 MyProject depends on A[compile

我有一个使用多个依赖项的项目。我习惯于在开发环境中使用

mvn compile exec:java -Dexec.classpathScope=compile -Dexec.mainClass="my.Main"
直到最近我开始使用一个依赖项(我们称之为
a
)来定义它自己在运行时范围内的依赖项,这个依赖项才工作得很好。它的一个运行时依赖项(我们称之为
B
)实际上是我的另一个依赖项的依赖项,我用
提供的
范围(我们称之为
C
)设置了它

所以我有

MyProject depends on A[compile] who depends on B[runtime]
MyProject depends on C[provided] who depends on B[no-scope-specified]
最后,我将
B
视为运行时依赖项,当我启动上述命令时,它会导致
ClassNotFoundException
。我找到的唯一解决方案是添加一个
dependencyManagement
条目,强制编译其作用域

这让我感到困扰,因为我没有直接使用该依赖项(我的代码中没有对它的引用),所以我不应该为它烦恼

在使用
mvn exec:java
时,是否有某种方法可以避免此类冲突,并可能加载类路径中的所有依赖项?


谢谢

当您将exec.classpathScope=compile更改为exec.classpathScope=runtime时会发生什么?我在提供的依赖项中包含的某个类上得到一个
ClassNotFoundException