我正在尝试使用sbt-native-packager构建一个rpm包,该包安装在自定义目录中,例如/ opt / myapp而不是/ usr - 由于内部策略要求。
我有一个构建标准rpm的build.sbt但是在修改目录时我很难过。我道歉 - 我对scala,sbt和本土的pacakger都很陌生。
我正在使用mapGenericFilesToLinux并希望保留其结构 - 只需修改目标目录的第一部分。
我在git hub问题https://github.com/sbt/sbt-native-packager/issues/4#issuecomment-6731183
中发现了这段代码片段linuxPackageMappings <+= target map { target =>
val src = target / "webapp"
val dest = "/opt/app"
LinuxPackageMapping(
for {
path <- (src ***).get
if !path.isDirectory
} yield path -> path.toString.replaceFirst(src.toString, dest)
)
}
我相信我想做类似的事情,除了
linuxPackageMappings in Rpm <++= <SOMETHING HERE> {
// for loop that steps through the source and destination and modifies the directory
}
提前感谢任何帮助
再见 帕姆
答案 0 :(得分:2)
因此,在sbt 0.12中,您需要确保在声明所需的值之前指定要使用的所有相关键。所以,让我们假装两件事:
linuxPackageMappings
包含了所有包装的映射。linuxPackageMappings in Rpm
没有直接添加任何内容。我们将取linuxPackageMappings
中的值并更改linuxPackageMappings in Rpm
的目录:
linuxPackageMappings in Rpm <<= (linuxPackageMappings) map { mappings =>
// Let's loop through the mappings and alter their on-disc location....
for(LinuxPackageMapping(filesAndNames, meta, zipped) <- mappings) yield {
val newFilesAndNames = for {
(file, installPath) <- filesAndNames
} yield file -> installPath.replaceFirst("/usr/share/app", "/opt/app")
LinuxPackageMapping(newFilesAndNames, meta, zipped)
}
}
这样做是为了破解linux包映射(包括是否为gzip文件,以及用户/组所有者/权限),并修改每个文件的安装路径。
希望有所帮助!在sbt-native-packager.NEXT(未发布)中,您可以配置默认安装位置。