Sbt在多项目中,将设置放置在文件或commonSettings中有什么区别

Sbt在多项目中,将设置放置在文件或commonSettings中有什么区别,sbt,sbt-assembly,sbt-plugin,Sbt,Sbt Assembly,Sbt Plugin,初学者的问题是,我有一个多项目的sbt文件,如果我把一般设置放在文件的开头会有区别吗?e、 g: organization := "com.example" version := "0.0.1-SNAPSHOT" scalaVersion := "2.11.12" resolvers ++= Seq( "Apache Development Snapshot Repository" at "https://repository.apache.org/content/reposit

初学者的问题是,我有一个多项目的sbt文件,如果我把一般设置放在文件的开头会有区别吗?e、 g:

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)

区别是什么?

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

这样的代码

organization := "foo"

lazy val root = (project in file(".")).settings(organization := "foo")
现在,如果您定义了一个新的子项目,如
common
,并向其中添加
organization

lazy val common = (project in file("common")).settings(organization := "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
bar

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

organization in ThisBuild := "foo"

lazy val common = (project in file("common")).settings(???)
或者将设置存储在
Seq
中,并将其应用于所有子项目和根项目。这将具有与scope
ThisBuild
中类似的效果,但更为明确:

val commonSettings = Seq(organization := "foo")

lazy val root = (project in file(".")).settings(commonSettings)
lazy val common = (project in file("common")).settings(commonSettings)