【问题标题】:How to make Lombok and AspectJ work together?如何让 Lombok 和 AspectJ 协同工作?
【发布时间】:2014-11-12 06:20:06
【问题描述】:

我刚刚发布了关于 Lombok 没有生成我的 getter/setter 的 this issue on SO。事实证明,它与 AspectJ 冲突。如果我禁用 AspectJ,那么会适当地生成 getter/setter。

我的猜测是ajc编译器无法识别lombok。

Lombok 和 AspectJ 是否相互排斥?两种技术可以一起工作吗?

【问题讨论】:

  • This site 可能很有用。但是你应该更准确地描述你在做什么(Eclipse?Maven?随便?)。
  • 感谢您的链接;绝对是一个有用的建议,但对于更复杂的 AJ 项目(例如:ITD、成员注入、接口实现等),我不认为该解决方案可以工作。提议的想法要求 javac 在 ajc 之前运行,但 javac 将在任何使用注入成员/接口/等的文件上失败,因此,不会有任何字节码供 ajc 使用。至少,这是我的理论;我还没试过确定。
  • 当我在使用 lombok palesz.wordpress.com/2011/12/03/… 将 aspectj 依赖的库添加到项目中时遇到问题时,这很有帮助@

标签: java aspectj lombok


【解决方案1】:

AspectJ 维护者 Andy Clement 目前的回答是,由于在 AspectJ 编译器基础结构中包含和重命名了 ECJ(Java 的 Eclipse 编译器)包,因此存在问题。

有关更多信息,Eric B. 和 A. Clement 正在 AspectJ 用户邮件列表上进行讨论:

也许我们可以用这个答案在这里关闭问题,并在问题解决后报告。

【讨论】:

  • 面临类似问题。您有任何可行的解决方案吗?
  • 我的回答有什么不清楚的地方?你甚至读过邮件列表线程吗?
  • 很酷,是的,我有。我实际上已经问过@Eric B 他是否有任何解决方案(问题和答案以及邮件主题是在 2014 年)。
  • @santhoshkumar 抱歉延迟回复;我没有看到通知/线程。我从来没有找到一个可行的解决方案,最终放弃了 Lombok,部分原因是这个限制。我看到@ChengT 发布了解决这个问题的方法(AspectJ 支持对我来说更重要)。虽然我从技术角度不明白为什么会这样,但我很想在未来再试一次。
【解决方案2】:

将 Project Lombok 作为依赖项添加到 aspectj-maven-plugin,如下所示:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.18</version>
    <scope>compile</scope>
</dependency>

例如:

<plugins>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>aspectj-maven-plugin</artifactId>
        <version>1.8</version>
        <dependencies>
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjrt</artifactId>
                <version>${aspectj.version}</version>
            </dependency>
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjtools</artifactId>
                <version>${aspectj.version}</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.16.18</version>
                <scope>compile</scope>
            </dependency>
        </dependencies>
        <configuration>
            <source>${java.version}</source>
            <target>${java.version}</target>
            <complianceLevel>${java.version}</complianceLevel>
            <encoding>${project.build.sourceEncoding}</encoding>
            <verbose>true</verbose>
            <privateScope>true</privateScope>
            <showWeaveInfo>true</showWeaveInfo>
            <outxml>true</outxml>
        </configuration>
        <executions>
            <execution>
                <phase>compile</phase>
                <goals>
                    <goal>compile</goal>
                    <goal>test-compile</goal>
                </goals>
                <configuration>
                    <aspectLibraries combine.self="override">
                        <aspectLibrary>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-aspects</artifactId>
                        </aspectLibrary>
                    </aspectLibraries>
                </configuration>
            </execution>
        </executions>
    </plugin>

【讨论】:

  • 我试过了,但它对我不起作用。 eclipse没有变化,maven从AJC给出错误:“你没有使用lombok支持的编译器”
  • 也无法使用此方法重新创建修复程序。
猜你喜欢
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
  • 2020-01-17
  • 2020-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多