гладкий codegen с пользовательским профилем

Я пытаюсь использовать собственный профиль в своей задаче 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, и он выглядит примерно так: MyPostgresDriver.scala" rel="nofollow noreferrer">это

По сути, каждый раз, когда я запускаю команду sbt slickCodeGen, я получаю

[ошибка] (run-main-0) java.lang.ClassNotFoundException: org.samidarko.models.PostgresProfile$

[ошибка] java.lang.ClassNotFoundException: org.samidarko.models.PostgresProfile$

...

Я просмотрел документацию sbt, но не смог понять, как добавить путь к классам в мои источники для этой задачи. Любая помощь будет оценена по достоинству.


person samidarko    schedule 05.02.2020    source источник


Ответы (2)


Вместо dependencyClasspath in Compile используйте fullClasspath in Compile см. https://www.scala-sbt.org/1.x/docs/Howto-Classpaths.html

person giorgio    schedule 08.09.2020
comment
Эта пара вопросов и ответов в основном такая же, как здесь? Тогда, пожалуйста, пометьте как дубликат вместо ссылки. Если это не так, и только один из ответов окажется здесь полезным, то, пожалуйста, объясните разницу вопросов и почему ответ все еще помогает. - person Yunnosch; 08.09.2020
comment
@Yunnosch К сожалению, нет принятого ответа на этот вопрос, это не позволяет мне пометить его как дубликат. Я продублировал свой ответ (лучше) - person giorgio; 08.09.2020
comment
Вы правы Извините, я не заметил этого препятствия. Я не уверен, как справиться с этим. Я думаю, что в этом случае приемлем один и тот же ответ здесь и там. Хотели бы вы упомянуть (в комментарии или в ответе) ссылку на другой? Может быть, также есть ссылка здесь. Я предполагаю, что, как только один из ответов будет принят или одобрен, превратить другой в официальный дубликат будет проще. - person Yunnosch; 08.09.2020
comment
samidarko Это полностью ваше решение, достаточно ли полезен для вас этот ответ или нет. Но если вы примете это ( stackoverflow.com/help/someone-answers ), то аналогичная пара вопросов и ответов может обрабатываться в большей степени в соответствии с концепциями StackOverflow. Итак, если вы не можете принять этот ответ, не могли бы вы объяснить, чего не хватает? - person Yunnosch; 08.09.2020
comment
Извините за поздний ответ, но я отказался от этого приложения из-за слишком большого количества проблем, связанных с использованием scala + sbt. Перешел на Эликсир, который выполнил свои обещания. К вашему сведению, замена dependencyClasspath на fullClasspath вызывает исключение. pastebin.com/JSZ7T2zy - person samidarko; 05.10.2020
comment
@samidarko Похоже, исключение просто напоминает вам загрузить переменные env. Если у вас есть файл .env в корне, просто добавьте плагин addSbtPlugin("au.com.onegeek" %% "sbt-dotenv" % "2.1.146") - person giorgio; 08.10.2020

Попробуйте добавить 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
person sttawm    schedule 16.03.2021