2015-12-13 31 views
9

Un progetto di gioco ha una cartella "progetto" in questo modo:Struttura della directory SBT. Cos'è il "progetto"?

  • progetto
    • obiettivo
    • progetto
      • obiettivo

Ho sempre pensato che questo fosse solo uno di quei misteri della vita di cui non dovrei pensare troppo, ma oggi la mia curiosità ha avuto la meglio su di me.

Googling mi ha dato this che indica che la cartella "progetto" di livello superiore è per la configurazione di sbt. Mi chiedo perché non abbiano chiamato ".sbt" a la ".git" e perché ci sia ancora un file "build.sbt" al di fuori di quella cartella, ma suppongo che non ci sia divertimento nel rendere le cose effettivamente sensate.

Inoltre non indica perché contiene al suo interno un'altra cartella "progetto".

Perché esiste una cartella "progetto" nidificata?

+0

Non riprodotto specifico, ma correlato SBT – cchantep

+0

@cchantep grazie, ho modificato il titolo –

risposta

6

http://www.scala-sbt.org/0.13/tutorial/Organizing-Build.html:

build.sbt nasconde come SBT funziona davvero. le build di sbt sono definite con il codice Scala. Quel codice, di per sé, deve essere costruito. Quale modo migliore di quello con sbt?

La directory del progetto è un'altra build all'interno della build, che sa come compilare la build. Per distinguere le build, a volte usiamo il termine build corretta per riferirsi alla tua build, e meta-build per fare riferimento al build in project. I progetti all'interno del metabuild possono fare qualsiasi cosa possa fare qualsiasi altro progetto. La tua definizione di build è un progetto sbt.

E le tartarughe vanno giù fino in fondo. Se lo desideri, puoi modificare la definizione di build del progetto di definizione build, creando un progetto/progetto/directory.

+1

dovrebbe avere effettivamente letto la pagina ... Ho appena guardato il grafico della struttura –

+1

Per elaborare su questo, i plugin per SBT sono in genere configurati nel metabuild, dal momento che devono essere disponibili per costruire il tuo vero progetto. Non è tipico avere un meta-metabuild ... ma si potrebbe. – acjay

+2

FTR, abbiamo una meta-meta-build in https://github.com/scala-js/scala-js, che contiene un generatore di sorgenti che genera sorgenti * per il progetto di build *, cioè per la meta-build . Quindi * si *, puoi! – sjrd

2

SBT è ricorsivo. Definisce le proprietà di costruzione per il tuo progetto con codice scala. Dove posizionare il codice scala? All'altro progetto all'interno del progetto corrente. Ma se la definizione del progetto stessa è un progetto corretto, allora può essere configurato con un'altra configurazione sbt. E così via. Alla Scala piacciono le strutture ricorsive.

È possibile modificare la versione del compilatore di scala, le opzioni del compilatore di scala per i progetti nidificati (in senso metrico). Probabilmente può cambiare il modo in cui il metaprogetto viene interpretato e ciò può influenzare il progetto più in alto.

+1

"Puoi cambiare la versione del compilatore di scala" Questa è l'unica cosa che non dovresti cambiare, poiché per i meta-build deve essere la stessa versione utilizzata da SBT. –