我在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 。
I have a multi project setup in SBT. In our build process there's a file in the project that is automatically updated by our CI. It contains the app version.
However, whenever I try to load the app settings, I get an error similar to the following:
[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)This is what my sbt file looks like:
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" )Here's my version.properties:
project.name="multi-module" project.version="0.0.1"The interesting thing is, the root project is able to load the settings correctly: if I remove the sub-modules, the build starts correctly. I'm using SBT version 0.13.8.
最满意答案
这是由appProperties模块( module1 , module2 )不可见引起的,您可以将其更改为:
appProperties in Global := { val prop = new Properties() IO.load(prop, new File("version.properties")) prop }sbt范围
This is caused by appProperties not being visible to submodules(module1, module2), you can change it to:
appProperties in Global := { val prop = new Properties() IO.load(prop, new File("version.properties")) prop }sbt scopes
更多推荐
发布评论