2012-06-16 27 views
6

¿Qué hay de la integración de Lombok con Play Framework 2? Me gusta mucho Lombok hace que mi código sea más legible y menos repetitivo. Y Play Framework también es maravilloso. Pero hay un gran problema en caso de que los mezcles.Lombok con Play 2

La razón principal es que scala temlates en el proyecto play compilado antes de clases de dominio. Así que Lombok, que en sí mismo es el truco del compilador, no genera acceso para ese momento.

La pregunta es: si hay alguna forma de hacerlo funcionar?

Encontré algunas discusiones en GoogleGroups, pero no proporcionan ninguna solución razonable. Entonces, ¿has tenido éxito con eso?

Y ... ¿por qué los chicos del proyecto Play Framework no ofrecen alguna solución de Lombok? De todos modos, Play está lleno de magia de generación de código y compilación de sombras ... así que, ¿por qué no?

+0

estoy viendo en Scala y muchas dudas spining en mi cabeza. Creo que scala es _difficult_. Y hay una razón más. Todavía es difícil encontrar el desarrollador scala. –

+0

En mi opinión, Scala es más fácil que Java. (YMMV aprendí Scala y Java al mismo tiempo llegando desde C). Pero tienes razón, es difícil encontrar desarrolladores. – Fabian

+0

@Fabian En mi humilde opinión, es muy diferente de la forma regular de Java. No es java con esteroides, es como otro mundo. Solo echa un vistazo a _implicit_ tricks. Cuando descubro las fuentes de scala, tengo una fuerte sensación de "qué ...". Pero esta es solo mi opinión subjetiva. –

Respuesta

3

Por lo tanto, la solución es bastante simple y se propuso en google groups, pero hay algo de oscuridad en los documentos, así que describiré paso a paso lo que se debe hacer.

1. Aislar el modelo de dominio logicaly

Esto significa que las clases de dominio no deben llamar a cualquier cosa, desde puntos de vista o controladores .

2. Crear sub-proyecto que contiene clases de dominio

Parte de la información dada here. El subproyecto es muy similar al proyecto de juego predeterminado y no es tan difícil crearlo. No encuentro ninguna herramienta para hacer esto desde la consola de Play, por lo que debe crear algunas carpetas a mano.

Al principio, cree una carpeta de subproyectos en la carpeta del proyecto principal. Supongamos que lo nombra datos de dominio. A continuación, cree las carpetas requeridas como se describe en standart app. layout. En la mayoría de los casos se desea crear árbol de directorios simple en la sub-carpeta creada:

app 
└ models 
    └ myclasses 

Ahora mover todas sus clases de dominio a árbol de directorios del sub-proyecto.

3.Configuration

configuración será sencillo lo suficientemente. Vaya a la carpeta del proyecto del proyecto principal y abra el archivo Build.scala. Este es el script de compilación para el sistema de compilación SBT.

Define algunas dependencias al principio. Agregue las siguientes cadenas a su archivo de compilación:

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

Esto agregará el jar de Lombok a su subproyecto.Ahora cree definición sub-proyecto:

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

Dónde ruta debe apuntar a la carpeta del sub-proyecto.

Y el último paso es actualizar la configuración del proyecto principal para que dependa del subproyecto. La dependencia implicará la reconstrucción del subproyecto en cada reconstrucción del proyecto principal.

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

Después de todo comienzo del proyecto principal, con juego orden dada en el terminal y escriba proyectos de mando. Debería ver su nuevo subproyecto.

4. Beneficio

Ahora es el momento de refactorizar con seguridad su código existente utilizando Lombok.

+1

O simplemente intente usar scala. Es dolor solo por un mes y un beneficio puro después. –

+5

La pregunta es sobre Java y un problema específico, decirle al chico "o usar Scala" es lo mismo que decirle "o usar Ruby o Python". No constructivo en absoluto. –

0

Mi aplicación es "Conseillers" (Juega 2.2.1 del proyecto) y mi modelo es "Conseiller.java" en/app/models

a) Basta con crear dos carpetas y mover las "/ app/models" carpeta a la nueva sub-carpeta:/modelos/app/models make a new directory move the folder

b) añadir un nuevo archivo build.sbt a esta nueva carpeta create a new sbt file

c) modificar el build.sbt en el carpeta de la aplicación raíz con .dependsOn (no estoy seguro si el archivo .ag gregate es 100% necesario): modify root build sbt file

d) cheque, compilar, ejecutar check

e) ver más aquí sbt subprojects documentation on Play site