java java-ee boilerplate lombok

java - ¿Cuáles son los riesgos con el Proyecto Lombok?



java-ee boilerplate (5)

Una posible desventaja de algo como Lombok es que con los setters / getters "perdidos", las herramientas de origen pueden no "reconocer" aspectos del objeto resultante que le dan cualidades de "bean", ya que esas cualidades solo se manifiestan en la clase compilada.

Otra desventaja es que todavía es otra pieza de "magia negra" dentro de la cadena de herramientas. Afortunadamente, parece ser una pieza bastante benigna (no lo he usado), y el hecho de que suceda en tiempo de compilación en lugar de en tiempo de ejecución es realmente una bendición (en mi humilde opinión). Sin embargo, no podrá volver a utilizar o compartir su código sin el proyecto, ya que está agregando artefactos a su base de código. Entonces, aunque el archivo de clase compilado puede ser un "POJO", yo diría que su código fuente NO es un POJO.

Ninguno de estos son inconvenientes paralizantes, sino solo aspectos a tener en cuenta para mirar hacia el futuro.

Me estoy planteando los objetivos de rendimiento para el nuevo año, y pensé que sería divertido poner un objetivo para reducir el tamaño de la base de código, especialmente repetitivo. Una de las acciones que he ideado para abordar esto es utilizar el Proyecto Lombok para hacer que los frijoles sean lo más pequeños posible. Pero tengo la costumbre de pasar por alto las desventajas del nuevo software y los enfoques, así que estoy confiando en la comunidad Stack Overflow: ¿Alguien puede decirme por qué Lombok es una mala idea?


Una limitación de Lombok es el hecho de que está estrechamente relacionado con el compilador de Java. Dado que la API del procesador de anotaciones solo permite la creación de nuevos archivos durante la compilación (y no la modificación de los archivos existentes) lombok usa esa API como punto de entrada para modificar el compilador de Java. Desafortunadamente, estas modificaciones del compilador hacen un uso intensivo de API no públicas. Usar lombok puede ser una buena idea, pero debe tener en cuenta que actualizar su compilador puede romper su código. La probabilidad es baja, pero siempre me siento incómodo al usar API no públicas.


Un inconveniente importante es el soporte de IDE. Como Lombok no es en realidad un cambio de idioma, y ​​como su IDE solo entiende Java, necesitará un IDE que admita a Lombok para que las cosas funcionen correctamente. A partir de ahora, eso es solo Eclipse que incluye Eclipse e IntelliJ. Si usa eclipse que podría estar bien, pero recuerde que también está tomando una decisión para futuros desarrolladores.

Sugeriría que consideres mover un poco de tu código a un lenguaje menos ceremonial como groovy. Hemos tenido éxito al mover algunos de nuestros modelos y lógica empresarial a groovy y funciona muy bien.


Como señaló el usuario @Jcs en otra respuesta, me gustaría agregar más.

En nuestro proyecto, estamos usando mapstruct que se usa para generar clases de mapeador, antes de compilar el código, usando el comando mvn generate-sources, esto se hace en la fase de proceso usando el complemento de procesador maven.

El proyecto lombok agrega el bytecode para el getter / setter en el archivo de clase en la fase de compilación.

ya que la fase del proceso se ejecuta antes de la compilación, se encuentra que no hay getter / setter disponible en la clase.

Hay algunas soluciones disponibles para ejecutar la fase de compilación en más de una. Vea este boleto git hub para más detalles.

Nota: Estoy usando STS ide por Spring y es compatible con lombok :)


Es una biblioteca de terceros, y hay desarrolladores que no la conocen bien.

IDE debe admitir el procesamiento de anotaciones (hay complementos para IDEA y Eclipse).

Como se mencionó anteriormente, su código será sin getters / setters. Conduce a violaciones de sonar / checkstyle.