代码之家  ›  专栏  ›  技术社区  ›  igx

在多项目中,将设置放置在文件或公用设置中有什么区别?

  •  2
  • igx  · 技术社区  · 6 年前

    初学者的问题是,我有一个多项目的SBT文件,如果我把常规设置放在文件的开头,有什么不同吗?例如:

    organization := "com.example"
      version := "0.0.1-SNAPSHOT"
      scalaVersion := "2.11.12"
    resolvers ++= Seq(
        "Apache Development Snapshot Repository" at "https://repository.apache.org/content/repositories/snapshots/",
        "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/",
    
        Resolver.mavenLocal
      )
    assemblyMergeStrategy in assembly := {
        case PathList("META-INF", xs @ _*) => MergeStrategy.discard
        case x => MergeStrategy.first
      }
    lazy val commonSettings  = Seq(  libraryDependencies ++= commonDependencies ++ testingDependencies)
    lazy val sharedProject = (project in file(...))
    .settings(commonSettings: _*)
    val projectA = .....dependsOn(sharedPorject)
    val projectB = .....dependsOn(sharedPorject)
    

    或者如果我把它放在公共设置中

    lazy val commonSettings  = Seq(  
    organization := "com.example",
      version := "0.0.1-SNAPSHOT",
      scalaVersion := "2.11.12",
    resolvers ++= Seq(
        "Apache Development Snapshot Repository" at "https://repository.apache.org/content/repositories/snapshots/",
        "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/",
        Resolver.mavenLocal
      ),
    assemblyMergeStrategy in assembly := {
        case PathList("META-INF", xs @ _*) => MergeStrategy.discard
        case x => MergeStrategy.first
      },
    libraryDependencies ++= commonDependencies ++ testingDependencies)
    lazy val sharedProject = (project in file(...))
    .settings(commonSettings: _*)
    val projectA = .....dependsOn(sharedPorject)
    val projectB = .....dependsOn(sharedPorject)
    

    有什么区别?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Ivan Stanislavciuc    6 年前

    未将其附加到特定项目的设置中定义的任何设置,即 .settings() ,附加到根项目。

    这样的代码

    organization := "foo"
    

    一样

    lazy val root = (project in file(".")).settings(organization := "foo")
    

    现在,如果您定义了一个新的子项目 common 并添加 organization 对它

    lazy val common = (project in file("common")).settings(organization := "bar")
    

    只有它才有价值 组织 设置为 bar .

    当根项目有自己的根项目时,这将在示例中保持。 组织 也定义了。

    lazy val root = (project in file(".")).settings(organization := "foo")
    
    lazy val common = (project in file("common")).settings(organization := "bar")
    

    这很容易用命令进行测试 sbt "show organization" sbt "show common/organization" . 它会打印出来 foo 酒吧 分别。

    最后,如果要为所有子项目定义相同的值,请在根项目中为范围添加设置 ThisBuild 如本例所示:

    organization in ThisBuild := "foo"
    
    lazy val common = (project in file("common")).settings(???)
    

    或将设置存储在 Seq 并应用于所有子项目和根。这与范围内的效果类似 这种构建 但更明确的是:

    val commonSettings = Seq(organization := "foo")
    
    lazy val root = (project in file(".")).settings(commonSettings)
    lazy val common = (project in file("common")).settings(commonSettings)
    
    推荐文章