我正在使用Scala构建定义构建一个使用SBT(0.11.0)的应用程序,如下所示:
object MyAppBuild extends Build {
import Dependencies._
lazy val basicSettings = Seq[Setting[_]](
organization := "com.my",
version := "0.1",
description := "Blah",
scalaVersion := "2.9.1",
scalacOptions := Seq("-deprecation", "-encoding", "utf8"),
resolvers ++= Dependencies.resolutionRepos
)
lazy val myAppProject = Project("my-app-name", file("."))
.settings(basicSettings: _*)
[...]
Run Code Online (Sandbox Code Playgroud)
我在流程结束时打包了一个.jar.
我的问题很简单:有没有办法从我的Scala代码中以编程方式访问应用程序的名称("my-app-name")和版本("0.1")?如果我能帮忙,我不想在两个地方重复它们.
任何指导非常感谢!
我正在使用sbt-buildinfo插件从我的构建定义生成Scala源代码,允许我从我的Scala代码中引用项目名称,版本等.
它通过生成具有以下内容的文件BuiltInfo.scala来完成此操作:
package hello
case object BuildInfo {
val name = "helloworld"
val version = "0.1-SNAPSHOT"
val scalaVersion = "2.10.3"
val sbtVersion = "0.13.2"
}
Run Code Online (Sandbox Code Playgroud)
在
target/scala-2.10/src_managed/main/sbt-buildinfo/BuildInfo.scala.
一切都编译,我可以参考那些vals.
但是,IntelliJ Idea不会将BuildInfo.scala识别为托管源文件,因此它会停止向我显示错误.知道怎么做吗?
谢谢!
我想我的Heroku应用程序(Play/Scala,在Heroku Cedar上运行)的运行时能够向我报告它是从哪个git提交的.Heroku应用程序通常由Heroku基础架构上的slug编译器构建 - 不幸的是,slug编译器将此作为此构建过程的早期部分:
删除未使用的文件,包括.git目录,.gitmodules文件,log和tmp中的任何内容,以及顶级.slugignore文件中指定的任何内容.
...所以Git信息不再可用于sbt-buildinfo我用于记录Git提交的插件.
如何在slug中记录HEAD提交?这些信息是否有可用的环境变量?
我正在使用前面提到的 sbt 插件来获取我正在开发的应用程序的版本。
该项目有子模块。这是主要的build.sbt
...
lazy val abandon = (project in file(".")).
aggregate(base, cli, gui).
dependsOn(base, cli, gui).
enablePlugins(BuildInfoPlugin).
settings(commonSettings: _*).
settings(
name := "abandon",
fork in run := true,
buildInfoKeys := Seq[BuildInfoKey](name, version, scalaVersion, sbtVersion),
buildInfoPackage := "co.uproot.abandon"
)
lazy val base = (project in file("base")).
settings(commonSettings: _*).
settings(
name := "abandon-base",
fork in run := true
)
lazy val cli = (project in file("cli")).
dependsOn(base).
settings(commonSettings: _*).
settings(
name := "abandon-cli",
fork in run := true
) …Run Code Online (Sandbox Code Playgroud) 在编译项目时使用sbt-buildinfo创建BuildInfo.scala文件的Play Framework 2.2项目中,如何build.sbt配置以便Play Framework不会监视BuildInfo.scala文件以进行更改,如果该文件发生更改,则不会重新启动服务器?
例如,如果会话开始于:
$ sbt ~run
Run Code Online (Sandbox Code Playgroud)
并且服务器在开发模式下启动,然后在另一个终端窗口sbt中启动另一个会话(运行另一个子项目,或者只运行其他sbt任务),第二个sbt会话将更新BuildInfo.scala文件,第一个sbt会话将检测到这个并重新加载玩项目.
所以问题是如何BuildInfo.scala从监控中排除(但仍然编译它并将其包含在分发包中).
显然watchSources配置选项可能有所帮助,但在阅读文档后,我无法弄清楚如何使用它来排除文件.
我认为这可能是新版本中出现的一个问题,无法解决为旧版本,我得到了带有sbt-buildinfo插件的PlayJava项目,这个问题确实很常见,因为IntelliJ一直说无法解决该符号
这是文件:
可以在IntelliJ Idea sbt托管的源文件中找到解决方案,并且在这里无法引用sbt-buildinfo生成的对象,但是提供的任何解决方案都不会对我有帮助:
真正奇怪的是,如果我“将目录取消标记为生成的源”,然后将该BuildInfo.scala文件手动移到程序包文件夹中buildpkg(而不是sbt-buildinfo程序包)到(我的自定义程序包),IntelliJ会看到该文件,但是此更改无用,因为该文件将再次生成,所有更改将被丢弃:
这是我的build.sbt:
lazy val root = (project in file(".")).enablePlugins(PlayJava, BuildInfoPlugin)
.settings(
buildInfoKeys := Seq[BuildInfoKey](name, version, scalaVersion, sbtVersion, buildInfoBuildNumber,
"hostname" -> java.net.InetAddress.getLocalHost.getHostName,
"gitHash" -> sys.env.getOrElse("BITBUCKET_COMMIT", "No BITBUCKET_COMMIT set")
),
buildInfoPackage := "buildpkg",
buildInfoOptions += BuildInfoOption.ToJson,
buildInfoOptions += BuildInfoOption.BuildTime
)
scalaVersion := "2.12.3"
Run Code Online (Sandbox Code Playgroud)
和我的plugins.sbt:
// The Play plugin
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.5")
addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.7.0")
Run Code Online (Sandbox Code Playgroud)
所以我想念的是什么解决方案