如何让sbt将我的代码所依赖的所有jar文件收集到一个地方?

Tim*_*den 37 scala jar distribution sbt

我是新来的.我希望它将所有依赖jar飞行以及我的jar文件放在一个地方.SBT将运行该应用程序,但我已经散布了各种依赖项,并且.ivy文件夹中充满了我的jar文件间接依赖的东西.那么是否有一个简单的命令将它们全部复制到一个地方,以便我可以将它分发到另一台机器?

pr1*_*001 19

你可以使用很多插件:sbt-assembly,sbt-proguard,sbt-onejar,xitrum-package等.

请参阅SBT插件列表.


Cat*_*azz 13

将以下行添加到您的build.sbt文件中.

retrieveManaged := true
Run Code Online (Sandbox Code Playgroud)

这将在本地收集依赖项


小智 10

在您的构建文件中创建一个任务,如下所示:

lazy val copyDependencies = TaskKey[Unit]("pack")

def copyDepTask = copyDependencies <<= (update, crossTarget, scalaVersion) map {
  (updateReport, out, scalaVer) =>
    updateReport.allFiles foreach {
      srcPath =>
        val destPath = out / "lib" / srcPath.getName
        IO.copyFile(srcPath, destPath, preserveLastModified = true)
    }
}
Run Code Online (Sandbox Code Playgroud)

将任务添加到项目中,如下所示:

lazy val HubSensors =
  Project("HubSensors", file("HubSensors"), settings = shared ++ Seq(
    copyDepTask,
    resolvers ++= Seq(novusRels),
    libraryDependencies ++= Seq(
      jodatime
    )
  )) dependsOn(HubCameraVision, JamServiceProxy, HubDAL)
Run Code Online (Sandbox Code Playgroud)

在SBT控制台类型中:

project [Project Name]
pack
Run Code Online (Sandbox Code Playgroud)


小智 8

尝试sbt-pack插件https://github.com/xerial/sbt-pack,它收集target/pack文件夹中的所有依赖jar并生成启动脚本.

  • 我刚从sbt-onejar转到sbt-pack,我不得不说它非常好:快速,易用和可靠. (3认同)