Play 애플리케이션의 버전을 자동으로 늘리기 위해 sbt 0.13 및 sbt-release 플러그인을 version.sbt
사용하므로 다음 줄의 파일 이 있습니다.
version in ThisBuild := "1.0-SNAPSHOT"
또한 환경별로 특정 이름으로 패키지를 준비하기 위해 매핑 아티팩트 이름을 준비합니다.
val main = play.Project(appName, dependencies = appDependencies).
settings(
...
artifactName := {(sv: ScalaVersion, module: ModuleID, artifact: Artifact) => {
val suffix = "-" + sys.props.getOrElse("environment","dev") + (if (artifact.classifier.isDefined) "-" + artifact.classifier.get else "")
artifact.name + "_" + sv.binary + "-" + version + suffix + "." + artifact.extension
}},
...
)
위의 코드를 평가하면 version.sbt가 1.0-SNAPSHOT로 값을 정의하기 때문에 버전 값이 1.0 (아마도 일종의 기본값)이됩니다. 많은 경우에서 버전을 사용하기 위해 다음과 같은 작업을 수행합니다 ThisBuild
.
SomeTask <<= (version in ThisBuild) map { ver => ...
some ver usage
...
}
그러나이 특정 솔루션은 작동하지 않습니다. 누군가 artifactName
설정 에서이 특정 값을 사용하는 방법에 대한 예를 제공 할 수 있습니까 ?
나를 도울 또 다른 해결책은이 변수에서 문자열 값을 얻는 것입니다. 덕분에 다음 작업을 수행 할 수 있습니다.
val appVersion := ... // some operation on version in ThisBuild
val main = play.Project(appName, appVersion, dependencies = appDependencies)
생성 된 패키지의 이름을 제공하기 위해 파일에서 로 version
설정 값을 전달하고 싶습니다 .version.sbt
artifactName
나는 sbt 0.13.3-SNAPSHOT으로 작업합니다 .
[sbt-0-13-3]> about
[info] This is sbt 0.13.3-SNAPSHOT
[info] The current project is {file:/Users/jacek/sandbox/so/sbt-0.13.3/}sbt-0-13-3 1.0-build_sbt
[info] The current project is built against Scala 2.11.0-RC3
[info] Available Plugins: sbt.plugins.IvyModule, sbt.plugins.JvmModule, sbt.plugins.GlobalModule, com.typesafe.sbt.SbtGit, com.typesafe.sbt.SbtProguard, growl.GrowlingTests, org.sbtidea.SbtIdeaPlugin, sbtman.Plugin, np.Plugin, com.timushev.sbt.updates.UpdatesPlugin
[info] sbt, sbt plugins, and build definitions are using Scala 2.10.3
tl; dr 구성 (version in ThisBuild).value
에서 version
설정 값이 필요할 때 사용 ThisBuild
합니다.
다음 version.sbt 파일이 제공됩니다.
version in ThisBuild := "1.0-version_sbt"
및 다음 build.sbt (참고 (version in ThisBuild).value
) :
scalaVersion := "2.11.0-RC3"
version := "1.0-build_sbt"
artifactName := {
(sv: ScalaVersion, module: ModuleID, artifact: Artifact) => {
val suffix = "-" + sys.props.getOrElse("environment","dev") + (if (artifact.classifier.isDefined) "-" + artifact.classifier.get else "")
artifact.name + "_" + sv.binary + "-" + (version in ThisBuild).value + suffix + "." + artifact.extension
}
}
sbt 쉘은 다음과 같은 출력을 제공했습니다.
[sbt-0-13-3]> show makePom::artifactPath
[info] /Users/jacek/sandbox/so/sbt-0.13.3/target/scala-2.11.0-RC3/sbt-0-13-3_2.11.0-RC3-1.0-version_sbt-dev.pom
나는 makePom::artifactPath
그것이 역 의존성이라는 것을 알았 기 때문에 설정을 사용 했습니다 artifactName
(그렇지 않으면 artifactName
함수 의 값을 표시 할 수 없었을 것입니다 ).
[sbt-0-13-3]> inspect artifactName
[info] Setting: scala.Function3[sbt.ScalaVersion, sbt.ModuleID, sbt.Artifact, java.lang.String] = <function3>
[info] Description:
[info] Function that produces the artifact name from its definition.
[info] Provided by:
[info] {file:/Users/jacek/sandbox/so/sbt-0.13.3/}sbt-0-13-3/*:artifactName
[info] Defined at:
[info] /Users/jacek/sandbox/so/sbt-0.13.3/build.sbt:5
[info] Dependencies:
[info] {.}/*:version
[info] Reverse dependencies:
[info] *:makePom::artifactPath
[info] Delegates:
[info] *:artifactName
[info] {.}/*:artifactName
[info] */*:artifactName
[info] Related:
[info] */*:artifactName
Play 프로젝트의 버전을 설정하려는 경우 version in ThisBuild
sbt가이 작업을 수행하므로 걱정할 필요가 없습니다.
val appVersion := ... // some operation on version in ThisBuild
val main = play.Project(appName, appVersion, dependencies = appDependencies)
무엇을 play.Project
( GitHub의 play.Project.scala 참조 )는 전달 applicationVersion
하는 version
것이며 버전을 설정했기 때문에 version.sbt
이미 sbt 자체에 의해 설정되었습니다. 그러나 명시 적으로 수행하려면 다음과 같이하십시오.
version := (version in ThisBuild).value
에서 build.sbt
.
[sbt-0-13-3]> show version
[info] 1.0-build_sbt
[sbt-0-13-3]> reload
[info] Loading global plugins from /Users/jacek/.sbt/0.13/plugins
[info] Loading project definition from /Users/jacek/sandbox/so/sbt-0.13.3/project
[info] Set current project to sbt-0-13-3 (in build file:/Users/jacek/sandbox/so/sbt-0.13.3/)
[sbt-0-13-3]> show version
[info] 1.0-version_sbt
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다