【问题标题】:slick codegen with custom profile带有自定义配置文件的光滑代码生成器
【发布时间】:2020-05-20 23:48:21
【问题描述】:

我正在尝试在我的 sbt slickCodeGen 任务中使用自定义配置文件,但我一直遇到 ClassNotFoundException。

sbt 任务如下所示:

lazy val slickCodeGen = taskKey[Unit]("Slick: generate Table")

slickCodeGen := {    
    val dir = (sourceDirectory in Compile).value    
    val cp = (dependencyClasspath in Compile).value
    val s = streams.value   
    val outputDir = (dir / "scala").getPath    
    val username = "dev"
    val password = ""    
    val url = "jdbc:postgresql://localhost/db"   
    val jdbcDriver = "org.postgresql.Driver" 
    val profile = "org.samidarko.models.PostgresProfile" 
    val pkg = "org.samidarko.models" 
    val r = (runner in Compile).value   
    r.run("slick.codegen.SourceCodeGenerator", cp.files, Array(profile, jdbcDriver, url, outputDir, pkg, username, password), s.log)  
}

我的自定义个人资料是org.samidarko.models.PostgresProfile,看起来很像this

基本上,每次我运行命令sbt slickCodeGen 我都会收到

[错误] (run-main-0) java.lang.ClassNotFoundException: org.samidarko.models.PostgresProfile$

[错误] java.lang.ClassNotFoundException: org.samidarko.models.PostgresProfile$

...

我浏览了 sbt 文档,但不知道如何将类路径添加到我的源代码中以完成此任务。任何帮助将不胜感激。

【问题讨论】:

    标签: scala sbt slick slick-3.0 slick-pg


    【解决方案1】:

    使用fullClasspath in Compile 代替dependencyClasspath in Compile 参见https://www.scala-sbt.org/1.x/docs/Howto-Classpaths.html

    【讨论】:

    • 那对 Q/A 和这里的这对基本一样吗?然后请标记为重复而不是链接。如果它不同并且这里只有一个答案恰好有帮助,那么请解释问题的不同之处以及为什么答案仍然有帮助。
    • @Yunnosch 不幸的是,该问题没有被接受的答案,它不允许我将其标记为重复。我重复了我的答案(一个更好的答案)
    • 你是对的对不起,我没有注意到这个障碍。我不确定如何处理这个问题。我认为这里有基本相同的答案,在这种情况下是可以接受的。您想(在评论或答案中)提及另一个链接吗?也许这里也有链接。我想,一旦其中一个答案被接受或赞成,将另一个答案变成官方副本就会更容易。
    • samidarko 这个答案是否对您有足够的帮助完全由您决定。但是,如果您接受这个(stackoverflow.com/help/someone-answers),那么可以根据 StackOverflow 概念更多地处理类似的 Q/A 对。所以如果你不能接受这个答案,你能解释一下缺少什么吗?
    • 抱歉回复晚了,但由于使用 scala + sbt 的痛点太多,我弃用了此应用程序。迁移到兑现承诺的 Elixir。仅供参考,将dependencyClasspath 替换为fullClasspath 会引发异常。 pastebin.com/JSZ7T2zy
    【解决方案2】:

    尝试添加project/PostgresProfile.scala,如下所示:

    package org.samidarko.models.PostgresProfile
    
    // HACK to make sbt think this class is available when referenced in build.sbt
    object PostgresProfile extends slick.jdbc.PostgresProfile
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-31
      • 2021-01-21
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多