2012-06-16 7 views
6

E l'integrazione di Lombok con Play Framework 2? Mi piace molto il Lombok rendendo il mio codice più leggibile e meno lastra. E anche Play Framework è meraviglioso. Ma c'è un grosso problema nel caso in cui tu li mescolassi.Lombok with Play 2

Il motivo principale è che il progetto scala temlates in gioco è stato compilato con prima delle classi di dominio. Quindi Lombok, che a sua volta è l'hack del compilatore, non genera accessor per quel tempo.

La domanda è: se ha qualche modo per farlo funzionare?

Ho trovato alcune discussioni in GoogleGroups, ma non forniscono alcuna soluzione ragionevole. Quindi hai avuto qualche successo con esso?

E ... perché i ragazzi del progetto Play Framework non forniscono una soluzione simile a Lombok? Comunque Play è pieno di magia di generazione del codice e compilazione di ombre ... quindi, perché no?

+0

sto guardando alla Scala e un sacco di dubbi spining nella mia testa. Penso che scala sia _difficile_. E c'è un altro motivo. È ancora difficile trovare uno sviluppatore di scala. –

+0

Secondo me scala è più facile di java. (YMMV ho imparato scala e java allo stesso tempo arrivando da C embedded). Ma hai ragione è difficile trovare sviluppatori. – Fabian

+0

@Fabian IMHO, è troppo diverso dal normale modo java. Non è java con steroidi, è come un altro mondo. Basta dare un'occhiata a trucchi illeciti. Quando ordino fonti di scala, ho una forte sensazione "What the ..". Ma questa è solo la mia opinione soggettiva. –

risposta

3

Quindi, la soluzione alternativa è piuttosto semplice ed è stata proposta in google groups, ma ci sono alcune oscurità nei documenti, bene descriverò passo-passo cosa si dovrebbe fare.

1. Isolare il modello di dominio logicaly

Ciò significa che le classi di dominio non devono chiamare qualsiasi cosa, da vista o controllori.

2. Creare sub-progetto che contiene classi di dominio

Alcune informazioni fornite here. Il sottoprogetto è molto simile al progetto di riproduzione di default, e la creazione non è così difficile. Non trovo nessuno strumento per farlo dalla console di gioco, quindi è necessario creare alcune cartelle a mano.

Prima creare la cartella del sottoprogetto nella cartella del progetto principale. Supponiamo che tu lo chiami dati di dominio. Successivamente, crea le cartelle richieste come descritto in standart app. layout. Nella maggior parte dei casi si desidera creare semplice albero di directory in creato sottocartella:

app 
└ models 
    └ myclasses 

Ora spostare tutte le classi di dominio a albero di directory di sotto-progetto.

3.Configuration

configurazione sarà semplice enought. Passare alla cartella del progetto principale del progetto principale e aprire Build.scala file. Questo è lo script di build per il sistema di build SBT.

Definire alcune dipendenze all'inizio. Aggiungere seguenti stringhe al file di configurazione:

val domainDependencies = Seq(
    "org.projectlombok" % "lombok" % "0.11.4" 
) 

Questo aggiungerà vaso di Lombok al sub-progetto.Ora creare definizione sotto-progetto:

val domainProject = PlayProject(
          "domain-data", appVersion, domainDependencies, path=file("domain"), mainLang=JAVA 
) 

Dove percorso deve puntare alla cartella di sotto-progetto.

E l'ultimo passaggio è l'aggiornamento della configurazione del progetto principale per farlo dipendere dal sottoprogetto. La dipendenza comporterà il ricondizionamento del sottoprogetto su ogni ricostruzione del progetto principale.

val main = PlayProject(appName, appVersion, appDependencies, mainLang = JAVA).dependsOn(domainProject) 

Dopo tutto inizio del progetto principale con gioco comando dato nel terminale e digitare progetti comando. Dovresti vedere il tuo nuovo sottoprogetto.

4. Utile

Ora è il momento di refactoring in modo sicuro il codice esistente utilizzando Lombok.

+1

Oppure prova a usare scala. È solo dolore per circa un mese e puro profitto dopo. –

+5

La domanda riguarda Java e un problema specifico, dire al ragazzo "o usare Scala" equivale a dirgli "o usare Ruby o Python". Non è affatto costruttivo. –

0

La mia app è "Conseillers" (Gioca 2.2.1 del progetto) e il mio modello è "Conseiller.java" in/app/modelli

a) Basta creare due cartelle e spostare il "/ app/modelli" cartella per la nuova sottocartella:/modelli/app/modelli make a new directory move the folder

b) aggiungere un nuovo file build.sbt a questa nuova cartella create a new sbt file

c) modificare il build.sbt nel cartella dell'app root con .dependsOn (non sono sicuro se .ag gregate è al 100% necessario): modify root build sbt file

d) controllo, compilare, eseguire check

e) vedere più qui sbt subprojects documentation on Play site