2011-09-08 12 views
22

¿Es posible anular o modificar tareas SBT incorporadas (como la compilación) para depender de tareas personalizadas en mi propia Build.scala? Anulación, por ejemplo, "compilar" directamente no es posible ya que se ha definido con valor perezoso y, por lo tanto, al hacer referencia a supercompilar se emite un error de compilación "no se puede usar super en el valor diferido".¿Agregar nuevas dependencias de tareas a las tareas SBT integradas?

+0

Posible duplicado para SBT 0.13 http://stackoverflow.com/q/8554992/1305344 –

Respuesta

5

Dado que esta cuestión aparece cuando googlear cómo agregar una dependencia de SBT, y las respuestas actuales son deprecated as of 0.13.x y se retira en 1.0, aquí está la respuesta actualizada, suponiendo que printAction es la tarea que compile debería depender de:

(Compile/compile) := ((Compile/compile) dependsOn printAction).value

7

Responder a la libre: http://code.google.com/p/simple-build-tool/wiki/ProjectDefinitionExamples#Insert_Task_Dependency da la respuesta:

Si está utilizando versiones más antiguas 0.7.x SBT se puede hacer esto:

import sbt._ 
class SampleProject(info: ProjectInfo) extends DefaultProject(info) { 
    lazy val printAction = task { print("Testing...") } 
    override def compileAction = super.compileAction dependsOn(printAction) 
} 
+4

Tenga en cuenta que esta sugerencia solo funciona para SBT 0.7.x. El 0.11 actual lo hace de manera diferente. –

+3

¿Cómo funciona la nueva versión? – Hadesara

+1

Esta respuesta no está actualizada. Ver [la versión actualizada que acabo de publicar] (https://stackoverflow.com/a/47654822/596329). – arussell84

17

Actualización: Véase la respuesta de arussell84 para una forma moderna de hacen esto

Usted debe ser capaz de hacerlo de esta manera:

en un archivo .sbt:

compile <<= (compile in Compile) dependsOn jruby 

Dónde jruby es una llave tarea que ha definido en un archivo de proyecto/something.scala:

val jruby = TaskKey[Unit]("jruby", "run a jruby file") 

Además, esto no es parte de su pregunta, pero sólo se puede llamar normal código Scala:

compile <<= (compile in Compile) map { result => 
    println("in compile, something") 
    result 
} 
+6

Hay tantas 'compilaciones' allí que no puedo entender cómo esto se generaliza para agregar dependencias a otras tareas. ¿Qué debo hacer para agregar una dependencia a 'stage'? –

+0

@ScottMorrison Creo que dices: 'stage << stage dependsOn jruby' – 0fnt

+2

Esta respuesta no está actualizada. Ver [la versión actualizada que acabo de publicar] (https://stackoverflow.com/a/47654822/596329). – arussell84

0

En la carpeta base_dir/project/ crear un archivo build.sbt y puso libraryDependencies += ... allí.

Esa es la forma idiomática SBT para construir su "proyecto de construcción", también conocido como "Meta Build".

Cuestiones relacionadas