2012-05-17 10 views
10

Abbiamo messo insieme un codice (molto semplice) per testare e introdurre le annotazioni di Lombok nel nostro progetto per rendere il nostro codice un po 'più bello. Sfortunatamente, sembra che si interrompa il test, sia attraverso Maven che quando i test vengono eseguiti attraverso IntelliJ.Non riesco a far funzionare Lombok nei test di unità

Le nostre classi di dominio simile a:

package foo.bar; 

import lombok.Data; 

@Data 
public class Noddy { 

    private int id; 
    private String name; 

} 

Con un test corrispondente:

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"); 
    } 
} 

Abbiamo la dipendenza aspectjrt a Maven (così come il relativo plug-in IntelliJ), e il AspectJ-maven-plugin.

Stiamo correndo con Maven POM 2-style, JSDK 1.6.0_31, Lombok 0.11.0:

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

Stiamo facendo qualcosa di stupido o manca qualcosa di ovvio?

Sarebbe bello se riuscissimo a farlo funzionare, dato che ho avuto l'idea di usare Lombok in produzione da qualche tempo.

Molte grazie,

P.

(FWIW, IntelliJ 11.1.2 ha il plugin Lombok 0,4 e sembra utilizzare ACJ per questo progetto)

+0

Avete mai trovato una soluzione per questo problema? – anazimok

risposta

1

Il problema sembra essere che il codice generato da lombok viene sovrascritto da ajc e, secondo un post di blog trovato da Fabrizio Giudici, non esiste una soluzione Maven "pulita" a causa di un bug nel plugin Maven AspectJ che impedisce di passare gli argomenti necessari ad ajc.

egli propone una soluzione qui: http://weblogs.java.net/blog/fabriziogiudici/archive/2011/07/19/making-lombok-aspectj-and-maven-co-exist

In realtà, this lavorato per me, ed è senza dubbio una soluzione più pulita. Potrebbe essere necessario aggiungere una fase di esecuzione per le classi di test con una directory weave aggiuntiva.

0

Sfortunatamente, ho provato la seconda soluzione - mentioned by mhvelplund - ma non ha funzionato per me. La soluzione era di rimuovere completamente il plugin Maven di AspectJ dal pom.xml!

+0

Per favore, non usare il servizio di collegamento breve per includere un URL all'interno della risposta. – j0k

+0

OK non lo sapeva, ha appena copiato/incollato il link fornito dallo stesso mhvelplund. – maxxyme

+0

Oh hai ragione. – j0k