반응형
코드에서 내 Scala 앱의 이름과 버전 (SBT에 설정된대로)에 액세스 할 수 있습니까?
다음과 같이 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: _*)
[...]
프로세스가 끝날 때 .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"
)
편집 : 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)
}
버전을 foo.Info.version
.
이름과 버전이 매니페스트에 삽입됩니다. Package 클래스의 Java 리플렉션을 사용하여 액세스 할 수 있습니다 .
val p = getClass.getPackage
val name = p.getImplementationTitle
val version = p.getImplementationVersion
반응형
'developer tip' 카테고리의 다른 글
모든 요청을 처리하도록 SpringMVC를 구성 할 수 있지만 정적 컨텐츠 디렉토리는 제외 할 수 있습니까? (0) | 2020.12.12 |
---|---|
다른 언어로 개발을위한 상대적 비용 연구 (0) | 2020.12.12 |
Amazon RDS에서 csv 파일로 테이블 내보내기 (0) | 2020.12.12 |
BAT 파일의 "입력 라인이 너무 깁니다"오류 (0) | 2020.12.12 |
둘 이상의 행 집합이있는 Django 템플릿의 대체 행 색상 지정 (0) | 2020.12.11 |