2012-01-09 12 views
34

Tengo un proyecto multiproyecto SBT, que se parece al ejemplo de SBT doc:¿Cómo deshabilitar las tareas de paquete y publicación para el módulo agregado de raíz en compilación de varios módulos?

import sbt._ 
import Keys._ 

object HelloBuild extends Build { 
    lazy val root = Project(id = "hello", 
         base = file(".")) aggregate(foo, bar) 

    lazy val foo = Project(id = "hello-foo", 
         base = file("foo")) 

    lazy val bar = Project(id = "hello-bar", 
         base = file("bar")) 
} 

Debido root es sólo un proyecto virtual de agregar dos subproyectos, me gustaría evitar la generación de paquetes (y publicación artefacto), pero aún generar paquete (y publicar) para ambos subproyectos.

¿Hay alguna manera fácil de conseguirlo?

Respuesta

25

En realidad, es es bastante fácil. Sólo anular la configuración de publish en el proyecto de raíz:

base = file(".")) settings (publish := { }) aggregate(foo, bar) 
+2

No funciona. Al menos cuando intento 'publish-local', el stills construye/publica un jar vacío para el proyecto raíz. (Yo uso sbt 0.11.2) – paradigmatic

+1

@paradigmatic ¿Suprimiste publicar localmente? Debe anular cualquier paso que no desee que se realice en la raíz. Lo probé con un proyecto vacío que contenía dos subproyectos, como en su ejemplo, y esto dejó de publicar nada en la raíz. –

+0

También probé este mismo ejemplo sin anulación y todavía publica artefactos para los 3 subproyectos. Eso es realmente extraño. – paradigmatic

-5

Añadir

publish := false 

al subproyecto (proyecto de raíz) build.sbt para evitar la publicación de

+0

El destino de publicación no acepta un booleano –

7

Los siguientes trabajó para mí (esto puede también se puede usar en otros subproyectos):

lazy val root = Project(
    id = "root", 
    base = file("."), 
    aggregate = Seq(foo, bar), 
    settings = Project.defaultSettings ++ Seq(
    publishLocal := {}, 
    publish := {} 
) 
) 

(sbt 0.12.2)

+1

Esto no funcionará para publishSigned & publishLocalSigned - es mejor desactivar la publicación de artefactos como se indica en la respuesta anterior. –

+1

@MikeAllen Dado que el orden de las respuestas cambia, hacer referencia al nombre de una persona sería mejor que "arriba". – akauppi

+0

Esto funcionó para mí, mientras que 'publishArtifact: = false' aún necesitaba un repositorio para ser nombrado. – akauppi

44

En lugar de jugar whac-a-mole haciendo una lista de tareas específicas para desactivar (publish, publish-local, publish-signed, etc.), otra opción es apagar el artefacto publicar en la fuente.

publishArtifact := false 

A pesar de que no hay ninguna publicación sucediendo, también me pareció que tenía que suministrar un valor publishTo para hacer feliz a la tarea del SBT-pgp publish-signed. Necesita este valor, incluso si nunca lo usa.

publishTo := Some(Resolver.file("Unused transient repository", file("target/unusedrepo"))) 
+1

El nombre de la clave es 'publishArtifact' – EECOLOR

+7

mientras esto funciona todavía crea y entrega archivos ivy.xml (al menos cuando se hace un local de publicación) – Jean

+0

¿Se supone que esto también funciona para proyectos que no son de raíz? – matanster

4

Es mejor utilizar la configuración publishArtifact. Funciona para todas las formas posibles de publicación porque todos dependen de esta configuración.

Si necesita apagar la publicación en un determinado proyecto puede hacerlo proporcionando el nombre del proyecto:

publishArtifact in root := false 

Hay raíz es la definición del proyecto de la pregunta original.

Puede poner esta línea en cualquier lugar de su build.sbt después de definir los proyectos.

3

Para desactivar las tareas relacionadas con las ofertas globales, agregue

settings(packageBin := { new File("") }, 
     packageSrc := { new File("") }, 
     packageDoc := { new File("") }) 

a la correspondiente Project (raíz o no). La "rareza" de este enfoque se debe a packageBin, & c., Siendo del tipo TaskKey[File]. Utilizo esta técnica con éxito (a nivel raíz y en una agregación intermedia).

Cuestiones relacionadas