Un esempio di build.sbt per permettermi di specificare facilmente le directory e le librerie di origine?

2

Recentemente ho iniziato a studiare lo sviluppo di Android e ho deciso di seguire i seguenti processi di sviluppo:

  1. Preinstallare Scala in emulatore
  2. Modifica i file sorgente in IntelliJ IDEA 11
  3. Compilare il progetto con sbt nella riga di comando
  4. Classi generate da Dex senza librerie Scala
  5. Crea APK e verifica nell'emulatore

Nei passaggi precedenti, eccetto il passaggio 3, penso che altri passi possano essere facilmente gestiti da riga di comando / makefile. Quindi eccomi qui, voglio un esempio di build.sbt per permettermi di specificare facilmente le seguenti informazioni:

  1. Directory di origine
  2. Biblioteche di riferimento
  3. Directory di output

Sono a conoscenza del plug-in sbt android e del plug-in idea sbt, ma voglio evitarli per il seguente motivo: progetti generati da Android plugin dex Librerie Scala per ogni build ma voglio avere il controllo su quella parte: Voglio saltare Librerie di Scala per lo sviluppo ma includerle per la build di rilascio, che richiede un sacco di scavo se lo faccio con il plugin ma può essere facilmente gestito se è fatto da riga di comando / makefile.

Se nel complesso quello che ho intenzione di fare ha senso, qualcuno che abbia familiarità con sbt può fornire un esempio di esempio build.sbt? Ho già passato ore a seguire le esercitazioni di sbt, ma ho ritenuto che fosse così difficile far sembrare ciascuna una semplice modifica al comportamento predefinito di sbt.

Una domanda a parte, sembra che le directory sorgente aggiunte da UnmanagedSourceDirectories vengano compilate ogni volta indipendentemente dal timestamp. In questo caso, che senso ha usare sbt? Posso solo alimentare tutti i file sorgenti in scalac.

Aggiorna
Questo è build.sbt basato sulla risposta di Daniel C. Sobral . Quando digito compila sbt, stampa solo alcune informazioni come "Imposta progetto corrente su HelloAndroid ...". Non avviene alcuna compilazione.

name := "HelloAndroid"

scalaVersion := "2.8.2"

unmanagedSourceDirectories := List(
  file("src"),
  file("gen"))

libraryDependencies := List() // remove Scala's library from dependencies

unmanagedJars := List(Attributed.blank(file("C:/bin/android/platforms/android-10/android.jar")))

target := file("target")

Non mi aspettavo che fosse compilato perché ho ancora bisogno di elaborare i file jar, ma almeno dovrei ottenere qualche errore del compilatore. Qualche suggerimento?

UPDATE : la compilazione sbt restituisce quanto segue:

[info] Set current project to HelloAndroid (in build file:/C:/Users...
[success] Total time: 0 s, completed May 14, 2012 10:36:23 AM

Ho due file sorgente nella directory src:

src/com/example/[HelloScala.scala MyActivity.java]

Nessun file di classe è stato trovato nella cartella di destinazione.

    
posta Codism 13.05.2012 - 07:25
fonte

1 risposta

3

Mi piacerebbe capire meglio quali problemi hai, perché non c'è davvero molto da fare. È tutto piuttosto semplice:

// build.sbt

unmanagedSourceDirectories in Compile := List(file("\path\to\my\source"))

libraryDependencies := List() // remove Scala's library from dependencies

unmanagedJars in Compile := List(Attributed.blank(file("""\path\to\my\library.jar""")))

target in Compile := file("""\path\to\my\target\directory""")

Si noti che quanto sopra è completamente grezzo: non consente a SBT di gestire le librerie tramite edera, non consente a SBT di trovare i file jar nelle directory per le librerie non gestite e utilizza percorsi assoluti per tutto.

Modifica

Come ho detto, i percorsi assoluti di cui sopra usano e sembra che tu voglia percorsi relativi per la tua fonte. Usa questo:

unmanagedSourceDirectories <<= baseDirectory( base => List("src", "gen") map (base / _ ))

Inoltre, stai usando la destinazione predefinita, quindi non ne hai bisogno. Tuttavia, SBT creerà i file all'interno di una sottodirectory di quel target, che probabilmente non è quello che desideri.

Puoi cambiare in questo modo:

target in Compile <<= baseDirectory(_ / "sbt-stuff") // move everything else to sbt-stuff

classDirectory in Compile <<= baseDirectory(_ / "target")  // generate the class files on target

Per quanto riguarda il messaggio di errore che non hai capito, sarebbe stato più facile chiedere che cosa significasse chiedere l'intera configurazione.

    
risposta data 14.05.2012 - 04:18
fonte

Leggi altre domande sui tag