2012-03-01 11 views

Odpowiedz

3

Używamy niestandardowej definicji zadania podobnej do tej, aby skopiować słoiki. Nie mam pojęcia, czy jest to zalecany sposób, aby to zrobić - tam jest nie brzydki collect. Możesz publikować poprawki (lub modyfikować moją odpowiedź w trybie in-line, jeśli chcesz).

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 
    } 
} 
29

Dodanie następujących do build.sbt kopii wszystkich zależności w lib_managed folderu w katalogu głównym projektu.

retrieveManaged := true 

Czy o to prosisz?

+1

robi również skopiować słoiki z innymi modułami A określony moduł zależy od? (Jak, jeśli mam projekt zawierający trzy moduły, a trzeci moduł zależy od dwóch innych modułów, to dałby mi katalog 'lib_managed' zawierający całe przechodnie zamknięcie wszystkich bibliotek, których moduł zależy od modułu, w tym modułów innych dwa moduły i * ich * zależności w tym projekcie? –

+0

@Wilfred Tak, lib_managed będzie zawierał każdy słoik wymagany przez twój projekt, co oznacza twoje bezpośrednie zależności i wszystkie przejściowe zależności – dhg

1

Korzystanie SBT 0.13.7, IO.copy i przyjaciele.

  1. Zdefiniuj kilka ustawienie gdzieś w definicji kompilacji:

    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. Określ zachowanie tych ustawień:

    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

Nie masz na myśli 'copyOutpath' zamiast' maxDynamicJarDir'? – nob

Powiązane problemy