Jdbc 当'时,父级中的依赖项未解析;运行';在子项目上调用
我有以下根项目设置:Jdbc 当'时,父级中的依赖项未解析;运行';在子项目上调用,jdbc,sbt,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.M
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)
lazy val root=project.aggregate(rest,后端).dependsOn(rest,后端)
lazy val rest=项目
lazy val backend=project.dependsOn(rest).settings(mainClass in(Compile,run):=Some(“my.backend.services.Main”))
在编译中运行Tryfork-in-run:=true
。如果这能解决问题,那可能是类加载器的问题。(如中所示,SBT加载驱动程序的类加载器显然不是JDBC用来查找驱动程序的类加载器或类加载器的祖先。)
如果<代码> For <代码>修复它,你可能会认为问题已经解决了。但是请注意,forking在新生成的JVM中运行您的程序,而不是使用您已经在其中运行SBT的JVM。生成新的JVM需要时间
如果您想尝试一个不涉及分叉的修复,我认为如果您在堆栈溢出和/或Google搜索中包含“classloader”,您会发现很多相关信息和建议,例如:
如果你看的话,还有很多类似的例子。试试fork-in-run:=true
。如果这能解决问题,那可能是类加载器的问题。(如中所示,SBT加载驱动程序的类加载器显然不是JDBC用来查找驱动程序的类加载器或类加载器的祖先。)
如果<代码> For <代码>修复它,你可能会认为问题已经解决了。但是请注意,forking在新生成的JVM中运行您的程序,而不是使用您已经在其中运行SBT的JVM。生成新的JVM需要时间
如果您想尝试一个不涉及分叉的修复,我认为如果您在堆栈溢出和/或Google搜索中包含“classloader”,您会发现很多相关信息和建议,例如:
如果你看的话,还有很多类似的问题。运行中的fork:=true
修复了吗?如果是这样的话,我会怀疑类加载器的问题。Seth,把它变成一个问题的形式,这样我就可以接受它了!我只需要添加这样的设置:lazy val backend=project.dependsOn(rest.settings)(mainClass in(Compile,run):=Some(“my.backend.services.Main”),fork in run:=true)
运行中的fork:=true是否修复了它?如果是这样的话,我会怀疑类加载器的问题。Seth,把它变成一个问题的形式,这样我就可以接受它了!我只需要添加这样的设置:lazy val backend=project.dependsOn(rest).settings(mainClass in(Compile,run):=Some(“my.backend.services.Main”),fork in run:=true)
我很好奇这是否是SBT中的一个bug。我确信驱动程序是通过Class.forName()
加载的,并且相应的类虽然作为依赖项引入,但在加载过程中不会作为类路径的一部分包含run@ThaDon:但这并不是那么简单,因为类加载器。看到我刚才添加到回答中的链接,我几乎很好奇这是否是SBT中的一个bug。我确信驱动程序是通过Class.forName()
加载的,并且相应的类虽然作为依赖项引入,但在加载过程中不会作为类路径的一部分包含run@ThaDon:但这并不是那么简单,因为类加载器。查看我刚才添加到答案中的链接