在子项目上调用“运行”时父级的依赖关系不解析

时间:2013-11-25 23:29:59

标签: jdbc sbt

我有以下根项目设置:

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时,我收到一条错误消息:

  

[error](run-main)java.sql.SQLException:找不到合适的驱动程序   JDBC:MySQL的://本地主机/分贝用户=用户ID&安培;密码=密码   java.sql.SQLException:找不到合适的驱动程序   JDBC:MySQL的://本地主机/ ....

所以"mysql" % "mysql-connector-java" % "5.1.26"项目中的backend依赖项似乎不是运行期间类路径的一部分?我觉得奇怪的是它只是这种依赖而不是其他...它是动态加载类的方式吗?

有解决方法吗?

1 个答案:

答案 0 :(得分:1)

试试fork in run := true。如果修复它,它可能是一个类加载器问题。 (就像在,无论类加载器SBT加载驱动程序显然不是类加载器,或类加载器的祖先,JDBC用于查找驱动程序。)

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

如果您想尝试不涉及分叉的修复,我认为如果您在Stack Overflow和/或Google搜索中包含“classloader”,您将找到许多相关信息和建议,例如:

如果你看的话,还有更多像这样的东西。