SBT - 不要用已发布名称中的连字符替换点

时间:2016-07-22 13:05:01

标签: scala sbt

我的build.sbt中的项目有这样的配置:

name := "test-utils_0.1"
organization := "com.my.test.project"
version := "0.6.0-SNAPSHOT"

我的问题是 - 当我运行sbt clean publish-local命令时,jar会在.ivy2本地目录中发布为:

test-utils_0-1_2.11

将其更改为test-utils_0.1_2.11的最佳方式是什么?

更新 我还试图以这种方式修改build.sbt的artifactName属性:

name := "test-utils"
organization := "com.my.test.project"
version := "0.6.0-SNAPSHOT"
utilsVersion := "0.1"

artifactName := { (sv: ScalaVersion, module: ModuleID, artifact: Artifact) =>
  artifact.name + "_" + utilsVersion + "_" + sv.binary +  "-" + module.revision + "." + artifact.extension
}

我得到名为test-utils_0.1_2.11.jar的jar,但这不会更改我的仓库中的发布名称(它仍然使用name属性发布,即。test-utils_2.11/0.6.0-SNAPSHOT/test-utils_2.11.jar)< / p>

2 个答案:

答案 0 :(得分:0)

.替换为_中的artifact.name with artifact.name.replace(“。”,“_”):

artifactName := { (sv: ScalaVersion, module: ModuleID, artifact: Artifact) =>
  artifact.name.replace(".", "_") + "_" + utilsVersion + "_" + sv.binary +  "-" + module.revision + "." + artifact.extension
}

如果您想自定义路径的其他部分,请使用以下内容:

  def customStyleBasePattern = "[organisation]/[module](_[scalaVersion])(_[sbtVersion])/[revision]/[artifact]-[revision](-[classifier]).[ext]"
  val ivyLocal = Resolver.file("local", file(Path.userHome.absolutePath + "/.ivy2/local2"))(Patterns(Nil, customStyleBasePattern :: Nil, true))

  externalResolvers += ivyLocal

答案 1 :(得分:0)

您需要更改工件名称(SBT 1.2.8):

lazy val utilsVersion = "0.1"

artifact in (Compile, packageBin) := {
  val old = artifact.in(Compile, packageBin).value
  old.withName(old.name + "_" + utilsVersion)
}

它将产生您所需要的:

[info]  published test-utils_0.1_2.12 to /home/pkhamutou/.ivy2/local/com.my.test.project/test-utils_2.12/0.6.0-SNAPSHOT/jars/test-utils_0.1_2.12.jar

您可以为packageDocpackageSrc重复相同的操作。