为啥 sbt-native-packager 在分发包中生成硬编码的***父目录?

Posted

技术标签:

【中文标题】为啥 sbt-native-packager 在分发包中生成硬编码的***父目录?【英文标题】:Why does sbt-native-packager generate a hardcoded top-level parent directory in distribution packages?为什么 sbt-native-packager 在分发包中生成硬编码的***父目录? 【发布时间】:2013-12-06 15:25:44 【问题描述】:

例如,在 Archives.scala 中:

def makeZip(target: File, name: String, mappings: Seq[(File, String)]): File = 
  ...
  val m2 = mappings map  case (f, p) => f -> (name +"/"+p) 

def makeTarball(compressor: File => File, ext: String)(target: File, name: String, mappings: Seq[(File, String)]): File = 
  ...
  val m2 = mappings map  case (f, p) => f -> (rdir / name / p) 

我试图理解为什么这个额外的目录“名称”必须在这些函数中进行硬编码。在旧的分发包中(在 sbt-native-packager 之前),我不相信这个额外的目录级别存在。我们正在尝试使用 sbt-native-packager 创建一些没有此功能的分发 zip/tgz,目前已复制并破解 Archives.scala 中的代码,以便映射: Seq[(File, String) ] 直接对应于分发包内部的结构,而不是具有附加的“名称”目录,但显然这并不理想。也许熟悉这个领域的人可以对此有所了解? (@jsuereth,我在看着你 :))

【问题讨论】:

【参考方案1】:

这更多是因为我的期望。您应该打开一张票以增强项目,以便可以通过标志配置此行为。

【讨论】:

好吧,我建议为了保持这些函数的通用性,而不是通过标志来配置它,应该完全删除***“名称”目录的硬编码。我声称,如果他/她认为合适,任何调用此函数的人都会发现将“名称”添加到所有映射的开头是微不足道的。你同意吗? 但是出于好奇,您指的是什么期望?如上所述,pre-(sbt-native-packager) 打包系统不包含这些***“名称”目录,所以我不确定这样做的目的是什么。 是的,这些是来自例如的期望。下载 tar.gz。一些 OSS linux-y 软件的文件。您下载的几乎所有软件分发都位于 zip 上的命名目录中,因此我们这样做是为了方便。这些不是游戏社区的期望。我相信 native-packager 试图让 JVM 社区更符合外部世界。也就是说,这应该完全是可配置的。如果你打开一个错误,我会尽快处理它。抱歉,如果它引起了混乱/问题。

以上是关于为啥 sbt-native-packager 在分发包中生成硬编码的***父目录?的主要内容,如果未能解决你的问题,请参考以下文章

sbt-native-packager,挂钩到 debian 包的生命周期

在 sbt-native-packager 中过滤映射

扩展 sbt-native-packager (Docker)

使用 sbt-native-packager 时的模糊参考

发布 sbt-native-packager 创建的 zip

如何使用 sbt-native-packager 设置 Docker Registry