2012-03-01 9 views

Respuesta

3

Utilizamos una definición de tarea personalizada similar a esta para copiar los archivos jar. No tengo idea de si esta es la forma recomendada de hacerlo: hay un feo collect allí. Siéntase libre de publicar mejoras (o modificar mi respuesta en línea si lo desea).

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

Agregar lo siguiente en sus build.sbt copia todas las dependencias en una carpeta lib_managed en la raíz de su proyecto.

retrieveManaged := true 

¿Eso es lo que estás pidiendo?

+1

¿Eso también copiar los frascos de los otros módulos de una cierto módulo depende de? (Por ejemplo, si tengo un proyecto que contiene tres módulos, y el tercer módulo depende de los otros dos módulos, me daría un directorio 'lib_managed' que contiene el cierre transitivo completo de todas las bibliotecas de las que depende el módulo, incluidos los módulos; el otro dos módulos y * sus * dependencias en ese proyecto? –

+0

@Wilfred Sí, lib_managed contendrá cada jar requerido por su proyecto. Eso significa sus dependencias directas y todas las dependencias transitivas. – dhg

1

Uso SBT 0.13.7, IO.copy y amigos.

  1. Definir algunos valores en algún lugar de su definición construcción:

    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. definir el comportamiento de estos valores:

    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

¿No quiere decir 'copyOutpath' en lugar de' maxDynamicJarDir'? – nob

Cuestiones relacionadas