在SBT建设路径为SBT-本机打包的packageMappings(Building paths i

2019-10-19 01:59发布

我很新的SBT,需要为我的项目的一个创建RPM软件包。 的RPM只包含1个文件,其是由SBT-onejar插件创建一个onejar)。 我想用SBT-本机打包插件,并创造了这样的/项目目录下的文件Packagin.scala:

object Packaging {
  val settings: Seq[Setting[_]] = packagerSettings ++ deploymentSettings ++ mapGenericFilesToLinux ++ Seq(

    maintainer := "Team",
    packageSummary := "Summary",
    packageDescription := """Description""",

    mappings in Universal += {
      file("target/scala-2.10/projectname_2.10-0.1-one-jar.jar") -> "/opt/projectname/projectname-0.1.jar"
    },

    linuxPackageMappings in Rpm <+= (baseDirectory) map { _:File =>
      (packageMapping(file("target/scala-2.10/projectname_2.10-0.1-one-jar.jar") -> "/opt/projectname/projectname-0.1.jar")
        withUser "someusr" withGroup "somegroup" withPerms "0755")
    },

    name in Rpm := "projectname",
    version in Rpm <<= version apply { sv => sv split "[^\\d]" filterNot (_.isEmpty) mkString "." },
    rpmRelease := "1",
    rpmVendor := "Vendor",
    rpmUrl := Some("url"),
    rpmGroup := Some("group"),
    rpmLicense := Some("BSD")
  )
}

1)我不想硬编码的文件名。 相反,具有"target/scala-2.10/projectname_2.10-0.1-one-jar.jar"我需要一种方式来利用现有SettingKey的,即target + "scala-" + scalaVersion + "/" + name + "_" + scalaVersion + "-" + version + "-one-jar.jar" -你怎么做到这一点=

2)对于值rpmRelease := "1"我想用一个系统属性,即在Maven的我会做${rpm.buildNumber} ,如何做在SBT的工作?

3)有什么我应该做的问候更好地SBT-本机打包插件?

Answer 1:

1)你应该总是使用任务输出在SBT而不是原始文件系统中查找。 由于SBT具有并行执行,如果你不把任务的输出的显式依赖,那么你就不能保证你运行你的任务前一个文件将被创建。

本着这种精神,你想改变你的包映射线是这样的:

mappings in Universal += {
  oneJar.value -> "/opt/projectname/projectname-0.1.jar"
},

oneJar关键是在定义onejar插件 。

2)SBT只是使用斯卡拉编译语言,所以你同样可以抓取系统属性(但也请提供一个默认的):

rpmRelease := Option(sys.props("rpm.buildNumber")) getOrElse "1"

3)现在你定义一个通用的包,并使用不同的用户重新定义在转速相同的文件。 该mapGenericFilesToLinux设置仍然缺乏一些自定义,但如果你没有创建通用的分布,你应该能够删除的设置,位和而是直接配置你的Linux软件包:

linuxPackageMappings in Rpm <+= (oneJar) map { jar:File =>
  (packageMapping(jar -> "/opt/projectname/projectname-0.1.jar")
    withUser "someusr" withGroup "somegroup" withPerms "0755")
},


文章来源: Building paths in SBT for the packageMappings of the sbt-native-packager