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 在两台不同的机器上生成两个不同的包的主要内容,如果未能解决你的问题,请参考以下文章

如何实现Robot框架在两台不同机器上并行测试执行?

如何使用 git 作为云存储在两台不同的机器上工作?

当我在两台不同的电脑上使用 BitTorrent 下载相同的 torrent 文件并使用相同的互联网连接时会发生啥?

不同的登录,但在两台计算机上共享实时会话,我使用什么平台以及如何构建它?

同样的压缩文件在两台电脑上显示大小不一样是啥原因

如何通过socket编程在两台机器之间发送文件?