2012-05-17 50 views
10

Hemos estado armando un código (realmente simple) para probar e introducir anotaciones Lombok en nuestro proyecto para hacer que nuestro código sea un poco más agradable. Desafortunadamente, parece romperse en las pruebas, tanto a través de Maven como cuando las pruebas se ejecutan a través de IntelliJ.Parece que Lombok no funciona en pruebas unitarias

Nuestras clases de dominio ser algo como:

package foo.bar; 

import lombok.Data; 

@Data 
public class Noddy { 

    private int id; 
    private String name; 

} 

Con una prueba correspondiente:

package foo.bar; 

import org.junit.Test; 
import static org.junit.Assert.assertEquals; 

public class NoddyTest { 

    @Test 
    public void testLombokAnnotations(){ 
     Noddy noddy = new Noddy(); 
     noddy.setId(1); 
     noddy.setName("some name"); 
     assertEquals(noddy.getName(), "some name"); 
    } 
} 

Tenemos la dependencia aspectjrt en Maven (así como el plugin relevante en IntelliJ), y el aspectj-maven-plugin

Estamos funcionando con Maven POM 2-estilo, JSDK 1.6.0_31, Lombok 0.11.0:

<dependency> 
    <groupId>org.projectlombok</groupId> 
    <artifactId>lombok</artifactId> 
    <version>0.11.0</version> 
</dependency> 

¿Estamos haciendo algo estúpido o falta algo obvio?

Sería genial si pudiéramos hacer que esto funcione, ya que he tenido un buen uso de Lombok en la producción desde hace algún tiempo.

Muchas gracias,

P.

(Fwiw, IntelliJ 11.1.2 tiene el plug-in Lombok 0,4 y parece estar usando ACJ para este proyecto)

+0

¿Alguna vez ha encontrado una solución para este problema? – anazimok

Respuesta

1

El problema parece ser que el código generado por lombok es sobrescrito por ajc, y de acuerdo con una entrada de blog que encontré por Fabrizio Giudici, no hay una solución Maven "limpia" debido a un error en el plugin Maven AspectJ que le impide pasar los argumentos necesarios a ajc.

propone una solución aquí: http://weblogs.java.net/blog/fabriziogiudici/archive/2011/07/19/making-lombok-aspectj-and-maven-co-exist

En realidad, this trabajó para mí, y es sin duda una solución más limpia. Es posible que deba agregar una fase de ejecución para las clases de prueba con un directorio de armadura adicional.

0

Desafortunadamente, probé la segunda solución - mentioned by mhvelplund - pero no funcionó para mí. La solución consistía en eliminar por completo el complemento AspectJ maven del pom.xml.

+0

Por favor, no use el servicio de enlace corto para incluir una url dentro de su respuesta. – j0k

+0

OK no sabía eso, solo copió/pegó el enlace provisto por el mismo mhvelplund. – maxxyme

+0

Oh, tienes razón. – j0k