15

我们一直在整理一些(非常简单的)代码,以便测试并将 Lombok 注释引入我们的项目,以使我们的代码更好一点。不幸的是,似乎在通过 Maven 和通过 IntelliJ 运行测试时都中断了测试。

我们的域类看起来像:

package foo.bar;

import lombok.Data;

@Data
public class Noddy {

    private int id;
    private String name;

}

通过相应的测试:

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

我们在 Maven 中有 aspectjrt 依赖项(以及 IntelliJ 中的相关插件)和 aspectj-maven-plugin。

我们使用 Maven 2 风格的 POM、JSDK 1.6.0_31、Lombok 0.11.0 运行:

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

我们是在做一些愚蠢的事情还是遗漏了一些明显的事情?

如果我们能实现这个功能那就太好了,因为我已经关注在生产中使用 Lombok 已经有一段时间了。

非常感谢,

P。

(FWIW,IntelliJ 11.1.2 有 Lombok 插件 0.4 并且似乎在这个项目中使用 ACJ)

4

2 回答 2

1

问题似乎是 lombok 生成的代码被 ajc 覆盖,并且根据我发现的 Fabrizio Giudici 的博客条目,由于 Maven AspectJ 插件中的错误阻止您通过ajc 的必要论据。

他在这里提出了一个解决方法:http ://weblogs.java.net/blog/fabriziogiudici/archive/2011/07/19/making-lombok-aspectj-and-maven-co-exist

实际上,对我有用,并且可以说是一种更清洁的解决方案。您可能必须使用额外的 weave 目录为测试类添加执行阶段。

于 2012-05-28T08:54:10.533 回答
0

不幸的是,我测试了第二个解决方案——mhvelplund 提到的——但它对我没有用。解决方案是从 pom.xml 中完全删除 AspectJ maven 插件!

于 2012-09-19T16:36:27.837 回答