2014-06-19 15 views
10

Questo è il mio progetto/Build.scala:Perché la console sbt non vede i pacchetti dal sottoprogetto nel progetto multi-modulo?

package sutils 

import sbt._ 
import Keys._ 

object SutilsBuild extends Build { 

    scalaVersion in ThisBuild := "2.10.0" 

    val scalazVersion = "7.0.6" 

    lazy val sutils = Project(
    id = "sutils", 
    base = file(".") 
).settings(
    test := { }, 
    publish := { }, // skip publishing for this root project. 
    publishLocal := { } 
).aggregate(
    core 
) 

    lazy val core = Project(
    id = "sutils-core", 
    base = file("sutils-core") 
).settings(
    libraryDependencies += "org.scalaz" % "scalaz-core_2.10" % scalazVersion 
) 
} 

Questo sembra essere compilare il mio progetto più che bene, ma quando vado nella console, non riesco a importare qualsiasi del codice che ha ottenuto appena compilato ?!

$ sbt console 
scala> import com.github.dcapwell.sutils.validate.Validation._ 
<console>:7: error: object github is not a member of package com 
     import com.github.dcapwell.sutils.validate.Validation._ 

Che cosa sto facendo male qui? Cercando di guardare il loro utilizzo, non vedo un modo per dire che sottoprogetto caricare mentre nella console

$ sbt about 
[info] Loading project definition from /src/sutils/project 
[info] Set current project to sutils (in build file:/src/sutils/) 
[info] This is sbt 0.13.1 
[info] The current project is {file:/src/sutils/}sutils 0.1-SNAPSHOT 
[info] The current project is built against Scala 2.10.3 
[info] Available Plugins: org.sbtidea.SbtIdeaPlugin 
[info] sbt, sbt plugins, and build definitions are using Scala 2.10.3 
+3

È sempre possibile scrivere 'sbt sutils/console'. –

risposta

14

C'è la soluzione da @ Alexey-Romanov per avviare l'attività console nel progetto le classi importazione sono in.

sbt sutils/console 

C'è però un'altra soluzione che rende il progetto principale sutilsdipendono dall'altro core. Utilizzare il seguente frammento per impostare il progetto - nota dependsOn core che porterà le classi dal progetto core allo spazio dei nomi sutils.

lazy val sutils = Project(
    id = "sutils", 
    base = file(".") 
).settings(
    test := { }, 
    publish := { }, // skip publishing for this root project. 
    publishLocal := { } 
).aggregate(
    core 
).dependsOn core 

BTW, si dovrebbe davvero utilizzare un semplice build.sbt per il vostro caso d'uso come segue:

scalaVersion in ThisBuild := "2.10.0" 

val scalazVersion = "7.0.6" 

lazy val sutils = project.in(file(".")).settings(
    test := {}, 
    publish := {}, // skip publishing for this root project. 
    publishLocal := {} 
).aggregate(core).dependsOn(core) 

lazy val core = Project(
    id = "sutils-core", 
    base = file("sutils-core") 
).settings(
    libraryDependencies += "org.scalaz" %% "scalaz-core" % scalazVersion 
) 

si potrebbe rendere ancora più facile quando ci si divide la build per due build.sbt s, ciascuno per i progetti.

Problemi correlati