2012-06-16 7 views
6

Was ist mit Lombok Integration mit Play Framework 2? Ich mag wirklich Lombok es macht meinen Code lesbarer und weniger Boilerplate. Und Play Framework ist auch wunderbar. Aber es gibt große Schwierigkeiten für den Fall, wenn Sie sie verwechseln.Lombok mit Play 2

Hauptgrund ist, dass im Spiel Projekt vor Domain-Klassen skaliert. Also erzeugt Lombok, der selbst der Compiler-Hack ist, keine Accessoren für diese Zeit.

Die Frage ist: ob es irgendwelche Möglichkeiten, damit es funktioniert? Ich habe einige Diskussionen in GoogleGroups gefunden, aber sie bieten keine vernünftige Lösung. Hast du Erfolg damit?

Und .. warum Leute von Play Framework-Projekt bieten keine Lombok-ähnliche Lösung? Anyway Play ist voll von Code-Generierung Magie und Schatten kompilieren ... also, warum nicht?

+0

ich scala bin beobachten und eine Menge Zweifel in meinem Kopf spining. Ich denke, Scala ist schwierig. Und es gibt noch einen Grund. Es ist immer noch schwer, Scala-Entwickler zu finden. –

+0

Meiner Meinung nach ist Scala einfacher als Java. (YMMV ich lernte scala und java gleichzeitig von embedded C kommend). Aber Sie haben recht, es ist schwer, Entwickler zu finden. – Fabian

+0

@ Fabian IMHO, es unterscheidet sich auch von normalen Java-Weg. Es ist nicht Java mit Steroiden, es ist wie eine andere Welt. Sehen Sie sich _implicit_ tricks an. Wenn ich Scala-Quellen wende, habe ich ein starkes Gefühl "Was zum ..". Aber das ist nur meine subjektive Meinung. –

Antwort

3

Also, Workaround ist ziemlich einfach und wurde in google groups vorgeschlagen, aber es gibt einige Unklarheiten in der Dokumentation, nun, ich werde Schritt für Schritt beschreiben, was man tun sollte.

1. Isolieren Sie Ihre Domain-Modell logicaly

Dies bedeutet, dass Domain-Klassen nichts von Ansichten oder Controller nennen sollte.

2. Erstellen Sie Teilprojekt, die Domäne Klassen enthalten

Einige Informationen gegeben here. Das Unterprojekt ist dem Projekt des Standardspiels sehr ähnlich und es ist nicht so schwierig. Ich finde keine Tools, um dies über die Spielekonsole zu tun, also müssen Sie einige Ordner manuell erstellen.

Zunächst erstellen Sie den Unterprojektordner im Hauptprojektordner. Nehmen wir an, Sie nennen es Domain-Daten. Als nächstes erstellen Sie die erforderlichen Ordner wie in standart app. layout beschrieben. In den meisten Fällen wollen Sie in erstellt Unterordner einfachen Verzeichnisbaum erstellen:

app 
└ models 
    └ myclasses 

Jetzt verschieben Sie alle Ihre Domain Klassen Teilprojekt Verzeichnisbaum.

3.Configuration

Konfiguration wird enought einfach sein. Wechseln Sie zum Projekt des Projekts Ordner und öffnen Sie Build.scala Datei. Dies ist ein Build-Skript für das SBT-Build-System.

Definieren Sie zunächst einige Abhängigkeiten. Fügen Sie Ihrer Build-Datei folgende Zeichenfolgen hinzu:

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

Dadurch wird Lomboks Glas zu Ihrem Unterprojekt hinzugefügt.Nun erstellen Teilprojektdefinition:

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

Wo Weg zu Teilprojekt Ordner anweisen.

Und der letzte Schritt ist die Aktualisierung der Hauptprojektkonfiguration, um sie vom Unterprojekt abhängig zu machen. Die Abhängigkeit führt bei jedem Hauptprojekt zum Wiederaufbau zu einem Unterprojekt.

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

Schließlich starten Hauptprojekt mit Spiel Befehl im Terminal gegeben, und Projekte Befehl eingeben. Sie sollten Ihr neues Unterprojekt sehen.

4. Gewinn

Nun ist es Zeit sicher Ihre vorhandenen Code mit Lombok Refactoring.

+1

Oder versuchen Sie einfach, scala zu verwenden. Es ist Schmerz nur für ungefähr Monat und Reingewinn später. –

+5

Die Frage bezieht sich auf Java und ein spezifisches Problem, dem Typ "oder Scala zu benutzen" ist dasselbe wie ihm zu sagen "oder Ruby oder Python zu benutzen". Überhaupt nicht konstruktiv. –

0

Meine App ist "conseillers" (Play-2.2.1-Projekt) und mein Modell ist "Conseiller.java" in/app/models

a) Nur zwei Ordner erstellen und die "/ app/models" bewegen Ordner in den neuen Unterordner:/models/app/models make a new directory move the folder

b) eine neue build.sbt Datei in diesem neuen Ordner hinzufügen create a new sbt file

c) ändern Sie den build.sbt in der root-App-Ordner mit der .dependsOn (nicht sicher, ob die .ag gregate ist 100% notwendig): modify root build sbt file

d) zu überprüfen, kompilieren, führen check

e) sehen hier mehr sbt subprojects documentation on Play site