Ale*_*ean 58 scala sbt sbt-buildinfo
我正在使用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")?如果我能帮忙,我不想在两个地方重复它们.
任何指导非常感谢!
Eug*_*ota 57
我刚写了sbt-buildinfo.安装插件后:
lazy val root = (project in file(".")).
enablePlugins(BuildInfoPlugin).
settings(
buildInfoKeys := Seq[BuildInfoKey](name, version, scalaVersion, sbtVersion),
buildInfoPackage := "foo"
)
Run Code Online (Sandbox Code Playgroud)
编辑:上面的代码段已更新,以反映更新版本的sbt-buildinfo.
它foo.BuildInfo
通过自定义生成您想要的任何设置对象buildInfoKeys
.
我一直想为此制作一个插件,(我写了)但是这是一个生成文件的快速脚本:
sourceGenerators in Compile <+= (sourceManaged in Compile, version, name) map { (d, v, n) =>
val file = d / "info.scala"
IO.write(file, """package foo
|object Info {
| val version = "%s"
| val name = "%s"
|}
|""".stripMargin.format(v, n))
Seq(file)
}
Run Code Online (Sandbox Code Playgroud)
您可以将您的版本作为foo.Info.version
.
And*_*ich 42
名称和版本将插入清单中.您可以使用Package类中的java反射来访问它们.
val p = getClass.getPackage
val name = p.getImplementationTitle
val version = p.getImplementationVersion
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11432 次 |
最近记录: |