我正在使用https://github.com/sbt/sbt-git来获得自动版本控制的好处,如使用Git版本部分中所述。
我的build.sbt
文件如下所示:
version := "0.1.0"
scalaVersion := "2.12.8"
scalacOptions ++= Seq(
"-encoding", "UTF-8", // source files are in UTF-8
"-deprecation", // warn about use of deprecated APIs
"-unchecked", // warn about unchecked type parameters
"-feature", // warn about misused language features
"-language:higherKinds", // allow higher kinded types without `import scala.language.higherKinds`
"-Xlint", // enable handy linter warnings
"-Xfatal-warnings", // turn compiler warnings into errors
"-Ypartial-unification" // allow the compiler to unify type constructors of different arities
)
scalacOptions in(Compile, console) ~= {
_.filterNot(Set("-Xlint"))
}
libraryDependencies ++= Seq(
"org.typelevel" %% "cats-core" % "1.6.0",
"ch.qos.logback" % "logback-classic" % "1.2.3",
"com.typesafe.scala-logging" %% "scala-logging" % "3.9.2"
)
libraryDependencies ++= Seq(
"org.scalacheck" %% "scalacheck" % "1.14.0" % "test",
"org.scalactic" %% "scalactic" % "3.0.6" % "test",
"org.scalatest" %% "scalatest" % "3.0.6" % "test"
)
libraryDependencies ++= Seq(
"com.typesafe.akka" %% "akka-slf4j" % "2.5.22",
"ch.qos.logback" % "logback-classic" % "1.2.3"
)
libraryDependencies += "com.dimafeng" %% "testcontainers-scala" % "0.25.0" % "test"
enablePlugins(JavaServerAppPackaging)
enablePlugins(DockerPlugin)
enablePlugins(GitVersioning)
dockerExposedPorts := Seq(8080)
git.formattedShaVersion := git.gitHeadCommit.value map { sha =>
s"$sha".substring(0, 7)
}
dockerUpdateLatest := true
dockerAlias := DockerAlias(None, Some("zerocoder"), (packageName in Docker).value, git.gitDescribedVersion.value)
提交后,它不会自动从版本“ 0.1.0”增加到“ 0.2.0”。
我在做什么错了?
答案 0 :(得分:5)
简短的答案是:
build.sbt
文件中删除/忽略显式设置版本(即此语句version := "0.1.0"
)>git tag -a v0.2.0 -m "my version 0.2.0"
然后您可以通过运行以下命令查看插件设置的版本:
>sbt version
// Displays
// [info] 0.2.0
这里有一些解释:
所以sbt-git
的工作方式是为您设置sbt构建的版本(运行sbt version
后得到的版本)。为此,它遵循几个rules,以下是第2个:
- 查看版本属性设置(默认为project.version),并检查sys.props以查看是否具有值。如果是这样,请使用它。
- 否则,请查看项目标签。第一个与gitTagToVersionNumberSetting匹配的对象用于分配版本。默认设置是查找以v和数字开头的标签,并使用数字作为版本。如果有多个版本标签,它将选择最高的版本。
因此,在您的情况下,由于您在project version
中将0.1.0
设置为build.sbt
,因此,运行sbt version
的结果是{{1 }}。即使执行了一些提交操作,0.1.0
的值仍将是sbt version
,因为一个规则将适用(只要在您的0.1.0
中设置了版本)。 请注意,插件不会更改该文件中设置的值,仅在定义时使用它。
如果您要删除该行(build.sbt
),则将应用规则2,简而言之,规则2查找version := "0.1.0"
并返回第一个匹配的tag
,默认情况下是一个以gitTagToVersionNumberSetting
开头,后跟数字的字符串。
因此从本质上讲,要使用该插件将项目设置为版本v
,您将必须在头提交0.2.0
的顶部创建一个标签(例如,运行v0.2.0
)。
在您开发项目时,将添加多个提交,直至版本git tag -a v0.2.0 -m "my version 0.2.0"
(或0.3.0
),并在最新提交的顶部创建了相应的标记后-说出标签0.2.1
-然后v0.3.0
会选择(应用规则2)并将其设置为项目的版本(可以通过运行plugin
看到),如前所述)。
这是一个流程,基本上可以用来使您的项目版本跟上您的(git)sbt version
版本。