当前位置: 首页 > 知识库问答 >
问题:

在子项目上调用“run”时,父项目中的依赖项未解析

钱峻
2023-03-14

我有以下根项目设置:

lazy val root = project.aggregate(rest,backend).dependsOn(rest,backend)                                 
lazy val rest = project
lazy val backend = project.dependsOn(rest).settings(mainClass in (Compile, run) := Some("my.backend.services.Main"))

run in Compile <<= (run in Compile in backend)

当我键入run时,我得到一个错误,说明:

[错误](运行main)java。sql。SQLException:未找到适合jdbc的驱动程序:mysql://localhost/db?user=userid

因此,在运行期间,后端项目中的“mysql”%“mysql connector java”%“5.1.26”依赖项似乎不是类路径的一部分?我觉得很奇怪只是这种依赖而不是其他。。。这是动态加载类的方式吗?

有没有解决办法?

共有1个答案

束新
2023-03-14

尝试fork in run:=true。如果修复了这个问题,这可能是类加载器的问题。(比如,SBT加载驱动程序的类加载器显然不是JDBC用来查找驱动程序的类加载器,也不是类加载器的祖先。)

如果<代码> For <代码>修复它,你可能会认为问题已经解决了。但请注意,forking在新生成的JVM中运行程序,而不是使用已经在其中运行SBT的JVM。生成新的JVM需要时间。

如果你想尝试一个不涉及分叉的修复,我认为如果你在堆栈溢出和/或谷歌搜索中包含“classloader”,你会发现很多相关信息和建议,例如:

  • 如何从任意位置使用JDBC驱动程序

如果你看,外面还有很多这样的。

 类似资料:
  • 我试图构建一个Maven父项目脚本,其中包含一个第三方项目(及其所有依赖项)和我的另外几个项目。 我想复制所有的依赖项(我的意思是所有的依赖项,包括由其他依赖项请求的jars,而这些依赖项又是由我的一个子项目请求的)到父项目目录,例如lib,这样我就可以用通配符类路径运行java: 我尝试了使用maven-依赖-插件的各种方法,如,但我能指向Maven的只是我自己的子项目,而不是它们的依赖项(我的

  • 我正在使用IntelliJ开发Spark应用程序。我正在遵循这个关于如何使intellij与SBT项目良好地工作的指导。 但这样我就无法在IntelliJ内部运行应用程序,因为类路径中不会包含spark依赖项。

  • 导入SBT项目时出错: ... 关于如何解决这个问题的任何建议。导入在另一台机器上运行良好。我看到了.ivy2文件夹中的jar文件。

  • 我有一个使用Gradle作为构建工具的项目和第二个使用Maven的POM的子项目。我没有在子项目上更改构建工具的自由。 我想要实现的是将我的项目添加到Maven POM中,作为我的Gradle项目的依赖项。 其中root(当前目录)是我的Gradle项目,并包含,Maven项目位于下,POM文件就在该目录下。 我在我的< code>build.gradle文件中尝试了这些变化: 第一次尝试: 第二

  • 我试图在Heroku中部署maven web应用程序,它依赖于其他应用程序。当我试图部署应用程序时,却遇到了这个错误。我不知道在传递依赖项时出了什么问题。 错误日志-------- !错误:未能用Maven构建应用程序,我们很抱歉这个构建失败了!如果您在应用程序代码中找不到问题,请提交一张票证,以便我们提供帮助:https://help.heroku.com/!推送被拒绝,无法编译Java应用程序

  • 我希望有人面对同样的问题来解决依赖。下面提到的文件 xsi:schemalocation=“http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”xmlns=“http://maven.apache.org/pom/4.0.0”xmlns:xsi=“http://www.w3.org/2001/x