【问题标题】:ClassNotFoundException while trying to use slick codegen尝试使用 slick codegen 时出现 ClassNotFoundException
【发布时间】:2016-10-20 23:23:03
【问题描述】:

我正在尝试使用自定义代码生成来从 mysql 而不是 Timestamp 获取 DateTime 类型。我只是无法使用自定义代码生成器运行 sbt 任务。

类位于 /project-root/app/com/my/name

val conf = ConfigFactory.parseFile(new File("conf/application.conf")).resolve()
slick <<= slickCodeGenTask

lazy val slick = TaskKey[Seq[File]]("gen-tables")
lazy val slickCodeGenTask = (sourceManaged, dependencyClasspath in Compile, runner in Compile, streams) map { (dir, cp, r, s) =>
  val outputDir = (dir / "slick").getPath
  val url = conf.getString("slick.dbs.default.db.url")
  val jdbcDriver = conf.getString("slick.dbs.default.db.driver")
  val slickDriver = conf.getString("slick.dbs.default.driver").dropRight(1)
  val pkg = "com.my.name"
  val user = conf.getString("slick.dbs.default.db.user")
  val password = conf.getString("slick.dbs.default.db.password")
  toError(r.run(s"$pkg.CustomCodeGenerator", cp.files, Array(slickDriver, jdbcDriver, url, outputDir, pkg, user, password), s.log))
  val fname = outputDir + s"/$pkg/Tables.scala"
  Seq(file(fname))
}

当我尝试运行sbt gen-tables时,它总是在下面给出相同的异常

java.lang.ClassNotFoundException: com.my.name.CustomCodeGenerator
    at java.lang.ClassLoader.findClass(ClassLoader.java:530)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sbt.classpath.ClasspathFilter.loadClass(ClassLoaders.scala:59)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at sbt.Run.getMainMethod(Run.scala:72)
    at sbt.Run.run0(Run.scala:60)
    at sbt.Run.sbt$Run$$execute$1(Run.scala:51)
    at sbt.Run$$anonfun$run$1.apply$mcV$sp(Run.scala:55)
    at sbt.Run$$anonfun$run$1.apply(Run.scala:55)
    at sbt.Run$$anonfun$run$1.apply(Run.scala:55)
    at sbt.Logger$$anon$4.apply(Logger.scala:84)
    at sbt.TrapExit$App.run(TrapExit.scala:248)
    at java.lang.Thread.run(Thread.java:745)

当我尝试一些内置的 java 类或默认的 slick codegen 类只是为了进行实验时,它会找到该类

我尝试在 build.sbt 类中更改此任务的顺序,但没有解决

【问题讨论】:

  • 在使用 slick codegen 和 play 时遇到了同样的问题。我解决了它为代码生成的东西创建了一个子项目。
  • 我按照你的建议做了,创建了一个模块,神奇地它现在看到了这个类。现在还有另一个问题,该类中的任何内容似乎都不起作用,但至少应该导入我的自定义字段。还是谢谢你

标签: java scala playframework slick-3.0


【解决方案1】:

而不是 dependencyClasspath in Compile 使用fullClasspath in Compile 见https://www.scala-sbt.org/1.x/docs/Howto-Classpaths.html

【讨论】:

  • @Deliganli 如果您接受此答案,我会将另一个问题标记为重复,以便它指向此处(除非他们先接受)。创建子项目更像是一种 hack,而不是真正的解决方案(即使它在技术上可行)
猜你喜欢
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
相关资源
最近更新 更多