Sbt-native-packager 在两台不同的机器上生成两个不同的包
Posted
技术标签:
【中文标题】Sbt-native-packager 在两台不同的机器上生成两个不同的包【英文标题】:Sbt-native-packager produces two different packages on two different machines 【发布时间】:2020-02-12 20:18:51 【问题描述】:我正在使用 sbt-native-packager 插件从 scala 项目构建一个 debian 包。从命令行本地生成的包(macos)具有不同的大小,当然 md5sum 与我使用相同 sbt 命令在 jenkins(debian)中生成的包不同:
sbt debian:packageBin
jenkins 生成的 debian 包在使用包含的 jar 时也会抛出错误,比如某些类没有包含在内:
ERROR org.apache.spark.deploy.yarn.ApplicationMaster - User class threw exception: java.lang.NoClassDefFoundError: shadeshapless/Generic
java.lang.NoClassDefFoundError: shadeshapless/Generic
我认为必须对 debian 环境中的类名做一些事情,所以添加了编译器选项:
scalacOptions ++= Seq("-Xmax-classfile-name","255")
我希望在本地和 jenkins 环境中生成相同的 debian 包。
【问题讨论】:
【参考方案1】:生成的包将始终依赖于机器,因为本机构建工具的版本(在您的情况下为 deb-pkg
)会影响包的生成方式。有时,插件生成的代码可能具有更改的时间戳,从而导致不同的输出。
话虽如此。我个人用着色无形、sbt 程序集和 docker 图像解决了这个类文件问题。然而,这与包装无关。
干杯, 渚
【讨论】:
以上是关于Sbt-native-packager 在两台不同的机器上生成两个不同的包的主要内容,如果未能解决你的问题,请参考以下文章
当我在两台不同的电脑上使用 BitTorrent 下载相同的 torrent 文件并使用相同的互联网连接时会发生啥?