sbt 切换运行时依赖

sbt switch dependencies for runtime

我正在开发一个使用 xgboost4j 的 spark 应用程序。 https://github.com/dmlc/xgboost/tree/master/jvm-packages

由于 jar 的本地 C 依赖性,此包需要编译为本地体系结构。但是集群的架构与开发笔记本电脑不同。当 运行 sbt assembly 通过集群中的一个时,如何替换包?或者你会建议通过 % "provided" ?

来解决这个问题吗?

为 (provided/compile) 个库使用后缀,例如:

val suffix = Option(System getProperty "provided").isDefined match {
    case true  => "provided"
    case false => "compile"
  }

libraryDependencies += "org.apache.spark" %% "spark-sql" % Spark.version % suffix

和运行 sbt -Dprovided assembly 如果您需要 uberjar 中的所有 jar