2011-09-08 6 views
8

Estoy usando sbt 0.10 con Scala 2.9.1.Recopilación de dependencias bajo sbt 0.10 (colocando todos los jar de dependencia en target/scala-version/lib /)

He leído http://groups.google.com/group/simple-build-tool/browse_thread/thread/792e5360877e78/987b6af687b8e33b?lnk=gst&q=collect+jars#987b6af687b8e33b

Sin embargo no quiero una enorme jarra. Solo quiero que los archivos de dependencia terminen en el directorio target/scala-2.9.1.final/lib.

La razón por la que no quiero un gran contenedor, ese proyecto usa muchas librerías , y generalmente solo la aplicación .jar cambia. Sin embargo, como este es un proyecto en varios idiomas y no todos los miembros del equipo tienen scala o sbt, jar se acaban de comprometer con git. Tener un enorme dar actualizado regulado inflar tamaño repo.

¿Cómo puedo copiar esas dependencias? ;)

Respuesta

14

no se ha especificado la configuración de la hiedra para copiar las configuraciones de, pero aquí hay un ejemplo totalmente funcional que copiará todos sus dependencias administradas a la carpeta target/<scala version>/lib (versión Scala está dada por la tarea crossTarget). Sólo tienes que copiar esto y ponerlo en el archivo project/Build.scala (o cualquier nombre de archivo que desea):

import sbt._ 
import Keys._ 

object MyBuild extends Build { 

    lazy val copyDependencies = TaskKey[Unit]("copy-dependencies") 

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

    lazy val root = Project(
    "root", 
    file("."), 
    settings = Defaults.defaultSettings ++ Seq(
     copyDepTask 
    ) 
) 
} 

Si desea una configuración específica, reemplace

updateReport.allFiles por updateReport.select(configuration = Set("compile")) o lo que sea la configuración de la hiedra que desea.

1

Las diversas teclas "Classpath" contienen diferentes vistas en el classpath, pero probablemente lo más fácil es modificar el plugin sbt-assembly para simplemente colocar los jars en un directorio en lugar de hacer el ciclo de descomprimir/volver a disparar. El plugin es muy pequeño (solo 150 líneas) y es bastante obvio, a simple vista, cuál es el lugar correcto para cambiar.

Cuestiones relacionadas