Sbt在多项目中,将设置放置在文件或commonSettings中有什么区别
初学者的问题是,我有一个多项目的sbt文件,如果我把一般设置放在文件的开头会有区别吗?e、 g: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
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
最后,如果希望为所有子项目定义相同的值,请在根项目中为scopeThisBuild
添加设置,如本例所示:
organization in ThisBuild := "foo"
lazy val common = (project in file("common")).settings(???)
或者将设置存储在Seq
中,并将其应用于所有子项目和根项目。这将具有与scopeThisBuild
中类似的效果,但更为明确:
val commonSettings = Seq(organization := "foo")
lazy val root = (project in file(".")).settings(commonSettings)
lazy val common = (project in file("common")).settings(commonSettings)