Есть ли простой способ скопировать все зависимости jar в определенный каталог в XSBT 0.11.2? - PullRequest
18 голосов
/ 01 марта 2012

При переходе с одной из более старых версий SBT на последнюю версию мы утратили способность быстро захватывать все зависимости jar и копировать их в каталог. Есть ли простой способ сделать то же самое в XSBT 0.11.2?

Ответы [ 5 ]

36 голосов
/ 01 марта 2012

Добавление следующего к вашему build.sbt копирует все зависимости в папку lib_managed в корне вашего проекта.

retrieveManaged := true

Это то, что вы просите?

3 голосов
/ 13 апреля 2013

См. Также: Как объявить зависимость проекта в SBT 0.10?

да, вы добавите

retrieveManaged := true

, и вы увидите банки в lib_managedпапка

3 голосов
/ 01 марта 2012

Мы используем пользовательское определение задачи, подобное этому, для копирования банок. Я понятия не имею, является ли это рекомендуемым способом сделать это - там ужасный collect. Не стесняйтесь публиковать улучшения (или, если хотите, измените мой ответ в строке).

copyJarsFolder <<= (crossTarget in (Compile, packageBin)).apply(_ / "jars")

copyJars <<= inputTask { (argTask: TaskKey[Seq[String]]) =>
  (copyJarsFolder, dependencyClasspath in Compile) map { (folder, cpEntries) =>
    ("mkdir -p " + folder).!
    //
    // find all dependencies
    val jars = cpEntries.collect {
      case attrFile if attrFile.metadata.keys.exists(_.label == "artifact") =>
        // probably an external jar
        attrFile.data
    }
    val copyCmd = jars.mkString("cp -p ", " ", " " + folder)
    copyCmd.!
    folder
  }
}
1 голос
/ 21 декабря 2015

Использование sbt 0.13.7 , IO.copy и друзей.

  1. Определите несколько настроек где-то в определении вашей сборки:

    val copyOutpath             = settingKey[File]("Where to copy all libs and built artifact")
    val copyAllLibsAndArtifact  = taskKey[Unit]("Copy runtime dependencies and built artifact to 'copyOutpath'")
    
  2. Определите поведение для этих настроек:

    lazy val myProject = project
      .in(file("."))
      .settings(
        copyOutpath              := baseDirectory.value / "specialFolderForMyProgram",
        copyAllLibsAndArtifact   := {
          val allLibs:                List[File]          = dependencyClasspath.in(Runtime).value.map(_.data).filter(_.isFile).toList
          val buildArtifact:          File                = packageBin.in(Runtime).value
          val jars:                   List[File]          = buildArtifact :: allLibs
          val `mappings src->dest`:   List[(File, File)]  = jars.map(f => (f, maxDynamicJarDir.value / f.getName))
          val log                                         = streams.value.log
          log.info(s"Copying to ${copyOutpath.value}:")
          log.info(s"  ${`mappings src->dest`.map(_._1).mkString("\n")}")
          IO.copy(`mappings src->dest`)
        },
        libraryDependencies       ++= Seq(
          //...
        )
      )
    
0 голосов
/ 01 марта 2012

Может быть, мой ответ на этот вопрос поможет вам: Есть ли способ получить все зависимости проекта через плагин sbt? Это самый простой из известных мне способов (я использую sbt 0.11.2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...