sbt 多项目未定义设置
sbt multi project undefined settings
我在 SBT 中设置了多项目。在我们的构建过程中,项目中有一个文件由我们的 CI 自动更新。它包含应用程序版本。
但是,每当我尝试加载应用程序设置时,都会收到类似于以下内容的错误消息:
[error] References to undefined settings:
[error]
[error] module1/*:appProperties from module1/*:version (/Users/jespeno/workspace/multi-module/build.sbt:10)
[error]
[error] module2/*:appProperties from module2/*:version (/Users/jespeno/workspace/multi-module/build.sbt:10)
这是我的 sbt
文件的样子:
val appProperties = settingKey[Properties]("app version")
appProperties := {
val prop = new Properties()
IO.load(prop, new File("version.properties"))
prop
}
val commonSettings = Seq(
version := appProperties.value.getProperty("project.version"),
scalaVersion := "2.11.7"
)
lazy val root = (project in file(".")).settings(commonSettings: _*)
.aggregate(module1, module2)
.settings(
name := appProperties.value.getProperty("project.name")
)
lazy val module1 = (project in file("./modules/module1"))
.settings(commonSettings: _*)
.settings(
name := "module1"
)
lazy val module2 = (project in file("./modules/module2"))
.settings(commonSettings: _*)
.settings(
name := "module2"
)
这是我的 version.properties
:
project.name="multi-module"
project.version="0.0.1"
有趣的是,根项目能够正确加载设置:如果我删除子模块,构建就会正确启动。我正在使用 SBT 版本 0.13.8
.
这是由于appProperties
对子模块不可见造成的(module1
,module2
),可以改成:
appProperties in Global := {
val prop = new Properties()
IO.load(prop, new File("version.properties"))
prop
}
我在 SBT 中设置了多项目。在我们的构建过程中,项目中有一个文件由我们的 CI 自动更新。它包含应用程序版本。
但是,每当我尝试加载应用程序设置时,都会收到类似于以下内容的错误消息:
[error] References to undefined settings:
[error]
[error] module1/*:appProperties from module1/*:version (/Users/jespeno/workspace/multi-module/build.sbt:10)
[error]
[error] module2/*:appProperties from module2/*:version (/Users/jespeno/workspace/multi-module/build.sbt:10)
这是我的 sbt
文件的样子:
val appProperties = settingKey[Properties]("app version")
appProperties := {
val prop = new Properties()
IO.load(prop, new File("version.properties"))
prop
}
val commonSettings = Seq(
version := appProperties.value.getProperty("project.version"),
scalaVersion := "2.11.7"
)
lazy val root = (project in file(".")).settings(commonSettings: _*)
.aggregate(module1, module2)
.settings(
name := appProperties.value.getProperty("project.name")
)
lazy val module1 = (project in file("./modules/module1"))
.settings(commonSettings: _*)
.settings(
name := "module1"
)
lazy val module2 = (project in file("./modules/module2"))
.settings(commonSettings: _*)
.settings(
name := "module2"
)
这是我的 version.properties
:
project.name="multi-module"
project.version="0.0.1"
有趣的是,根项目能够正确加载设置:如果我删除子模块,构建就会正确启动。我正在使用 SBT 版本 0.13.8
.
这是由于appProperties
对子模块不可见造成的(module1
,module2
),可以改成:
appProperties in Global := {
val prop = new Properties()
IO.load(prop, new File("version.properties"))
prop
}