web-dev-qa-db-ja.com

マルチプロジェクトのsbtプロジェクトを設定する方法が混乱している

ここではsbt .13を使用しています。

私はこれをこれまでに持っています:

import sbt._
import Keys._
import play.Project._

object ApplicationBuild extends Build {

  val appVersion = "1.0"

  resolvers += "local maven" at "/Users/blankman/.m2/repository/"

  val commonDependencies = Seq()
  val modelDependencies = Seq(
    "com.typesafe.slick" %% "slick" % "2.0.1",
    "org.slf4j" % "slf4j-nop" % "1.6.4"
  )

  val serviceDependencies = Seq(
    "com.typesafe.slick" %% "slick" % "2.0.1",
    "org.slf4j" % "slf4j-nop" % "1.6.4"
  )

  val webDependencies = Seq(
    //"org.Apache.Tomcat" % "Tomcat-jdbc" % "8.0.3",
    "mysql" % "mysql-connector-Java" % "5.1.30",
    "com.typesafe.slick" %% "slick" % "2.0.1"
  )


  lazy val common = Project(
    id = "app-common",
    base = file("app-common"),
    dependencies = commonDependencies
  )

  lazy val models = Project(
    id = "app-models",
    base = file("app-models"),
    settings(modelDependencies: _*)
    )
  ).dependsOn(common)

  lazy val services = Project(
    id = "app-services",
    base = file("app-services"),
    settings = Seq(
      libraryDependencies ++= serviceDependencies
    )
  ).dependsOn(models, common)


  lazy val web = play.Project("app-web", appVersion, webDependencies,
                        path = file("app-web"))
                      .settings(playScalaSettings: _*)
                      .dependsOn(services)

}

これは機能しません。たとえば、私が入ると:

プロジェクトアプリモデル

コンパイルしてみると、コンパイルが有効ではないかと言われています。

プロジェクトの設定方法が本当に困惑しています。正しい方法は何ですか?

このスライド#10をここで見てみましょう http://jsuereth.com/scala/2013/06/11/effective-sbt.html できると言っています:

lazy val web = (
  Project("app-models", file("app-models"))
  settings(
     libraryDependencies += modelDependencies
  )
)

しかし、これを行うと、エラーも発生します。

私は基本的にsbtの中にいくつかのプロジェクトを持っています:

common
models
services
web (which is play)
  • モデルはコモンズに依存します
  • サービスはコモンズ+モデルに依存します
  • ウェブはサービスに依存

誰かがこれを機能させるのを手伝ってくれる?

28
Blankman

ビルド定義でいくつかの問題が見つかりましたが、Joshの Effective sbt の話を買ったので、スタイルに専念する必要があると思います。

効果的なsbt

ここにファイルがあります。

project/build.properties

_sbt.version=0.13.2
_

プロジェクト/play.sbt

_val playVersion = "2.2.2"

resolvers += Resolver.typesafeRepo("releases")

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % playVersion) 
_

project/commons.scala

_import sbt._
import Keys._

object Commons {
  val appVersion = "1.0"

  val settings: Seq[Def.Setting[_]] = Seq(
    version := appVersion,
    resolvers += Opts.resolver.mavenLocalFile
  )
}
_

project/dependencies.scala

_import sbt._
import Keys._

object Dependencies {
  val slickVersion = "2.0.1"
  val slick = "com.typesafe.slick" %% "slick" % slickVersion
  val slf4jVersion = "1.6.4"
  val slf4jNop = "org.slf4j" % "slf4j-nop" % slf4jVersion
  val mysqlConnectorVersion = "5.1.30"
  val mysqlConnector = "mysql" % "mysql-connector-Java" % mysqlConnectorVersion

  val commonDependencies: Seq[ModuleID] = Seq(
    slick,
    slf4jNop
  )
  val modelDependencies: Seq[ModuleID] = Seq()
  val serviceDependencies: Seq[ModuleID] = Seq()
  val webDependencies: Seq[ModuleID] = Seq(
    mysqlConnector
  )
}
_

build.sbt

_import play.Project._
import Dependencies._

lazy val appCommon = (project in file("app-common")).
  settings(Commons.settings: _*).
  settings(
    libraryDependencies ++= commonDependencies
  )

lazy val appModels = (project in file("app-models")).
  settings(Commons.settings: _*).
  settings(
    libraryDependencies ++= modelDependencies
  ).
  dependsOn(appCommon)

lazy val appServices = (project in file("app-services")).
  settings(Commons.settings: _*).
  settings(
    libraryDependencies ++= serviceDependencies
  ).
  dependsOn(appModels, appCommon)

lazy val appWeb = (project in file("app-web")).
  settings(Commons.settings: _*).
  settings(playScalaSettings: _*).
  dependsOn(appServices)
_

ノート

設定パラメーターと設定メソッド

modelsservicesの場合、設定シーケンスをProject(...)コンストラクターに渡しているため、デフォルト設定が読み込まれていない可能性があります。デフォルト設定を手動で渡すか、Projectsettings(...)メソッドを使用することができます。

_lazy val appModels = (project in file("app-models")).
  settings(
    libraryDependencies ++= modelDependencies
  ).
  dependsOn(appCommon)
_

Joshは括弧を使用した後置表記法を使用していますが、これにはドット表記法を使用することをお勧めします。そのため、話とは少し異なります。

libraryDependencies ++ =

上記の例のように、modelDependencieslibraryDependenciesに渡す必要があります。 settingsを直接呼び出すようにしました。

リゾルバー

resolvers設定は何にも渡されません。これはおそらく正しくありません。

46
Eugene Yokota