実行時にプラグイン内に構成を追加し、おそらく にも登録したいと思いますprojectConfigurations
。そのような方法で状態を操作する可能性はありますか? これはコマンドで実行する必要があり、ソリューションは の奥深くに埋め込まれているとAttributeMap
思いますが、その獣にアプローチする方法がわかりません。
def addConfiguration = Command.single( "add-configuration" )( ( state, configuration ) => {
val extracted = Project extract state
val c = configurations.apply( configuration )
// Add c to the state ...
???
} )
バックグラウンド
私はsbt-slick-codegenプラグインに取り組んでおり、これは必須機能としてマルチデータベース サポートを備えています。sbt でデータベースを構成するために、私は非常に単純なアプローチを取りました。すべてを Map に詰め込みます。
databases in SlickCodegen ++= Map(
"default" -> Database(
Authentication(
url = "jdbc:postgresql://localhost:5432/db",
username = Some( "db_user_123" ),
password = Some( "p@assw0rd" )
),
Driver(
jdbc = "org.postgresql.Driver",
slick = slick.driver.PostgresDriver,
user = Some( "com.example.MySlickProfile" )
),
container = "Tables",
generator = new SourceCodeGenerator( _ ),
identifier = Some( "com.example" ),
excludes = Seq( "play_evolutions" ),
cache = true
),
"user_db" -> Database( ... )
)
さて、これは機能しますが、 sbtの目的を無効にし、セットアップが難しく、保守と更新が困難です。代わりに、次のように構成することをお勧めします。
container in Database := "MyDefaultName",
url in Database( "backup" ) := "jdbc:postgresql://localhost:5432/database",
cache in Database( "default" ) := false
また、このアプローチは現在の開発ブランチDatabase( x )
で機能していますが、コンパイル時に既知の構成のみであり、次の問題につながります。
その上で、 PlayFrameworkをサポートするモジュールを追加する予定です。アイデアは、TypesafeインスタンスSettingKey[Seq[Config]]( "configurations" )
を受け入れ、それらから洗練された構成を読み取り、適切な構成を生成する設定を持つことです。しかし、このステップでは、私はアイデアがありません。 Config
Database( x )