gpt4 book ai didi

scala - 我可以从代码访问我的 Scala 应用程序的名称和版本(在 SBT 中设置)吗?

转载 作者:行者123 更新时间:2023-12-02 20:39:40 25 4
gpt4 key购买 nike

我正在使用 SBT (0.11.0) 构建一个应用程序,使用 Scala 构建定义,如下所示:

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: _*)
[...]

我在流程结束时打包一个 .jar。

我的问题很简单:有没有一种方法可以从我的 Scala 代码以编程方式访问应用程序的名称(“my-app-name”)和版本(“0.1”)?如果可以的话,我不想在两处重复它们。

非常感谢任何指导!

最佳答案

sbt-buildinfo

我刚刚写了sbt-buildinfo 。安装插件后:

lazy val root = (project in file(".")).
enablePlugins(BuildInfoPlugin).
settings(
buildInfoKeys := Seq[BuildInfoKey](name, version, scalaVersion, sbtVersion),
buildInfoPackage := "foo"
)

编辑:上面的代码片段已更新以反射(reflect)最新版本的 sbt-buildinfo。

它通过自定义 buildInfoKeys 生成具有您想要的任何设置的 foo.BuildInfo 对象。

临时方法

我一直想为此制作一个插件,(我编写了它),但这里有一个生成文件的快速脚本:

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)
}

您可以通过 foo.Info.version 获取您的版本。

关于scala - 我可以从代码访问我的 Scala 应用程序的名称和版本(在 SBT 中设置)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8732891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com