【问题标题】:IntelliJ disable lombok for JUnit testsIntelliJ 为 JUnit 测试禁用 lombok
【发布时间】:2017-11-07 07:37:50
【问题描述】:

我在 IntelliJ 中使用 lombok。即使我使用 maven mvn clean test 测试项目,一切都按预期工作,一切正常。但是当我想从 IDE 中执行测试时,我遇到了错误:

org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #3 of class path resource [sql/core-base-schema.sql]: CREATE ALIAS GETTEXT AS'
String getText(Long textId, String langId) {
    return "testText";
}'; nested exception is org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "/org/h2/dynamic/GETTEXT.java:5: warning: Can't initialize javac processor due to (most likely) a class loader problem: java.lang.NoClassDefFoundError: com/sun/tools/javac/processing/JavacProcessingEnvironment
public class GETTEXT {
       ^
    at lombok.javac.apt.LombokProcessor.init(LombokProcessor.java:83)
    at lombok.core.AnnotationProcessor$JavacDescriptor.want(AnnotationProcessor.java:87)
    at lombok.core.AnnotationProcessor.init(AnnotationProcessor.java:140)
    at lombok.launch.AnnotationProcessorHider$AnnotationProcessor.init(AnnotationProcessor.java:69)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.<init>(JavacProcessingEnvironment.java:500)
...
  Caused by: java.lang.ClassNotFoundException: com.sun.tools.javac.processing.JavacProcessingEnvironment
    at java.lang.ClassLoader.findClass(ClassLoader.java:530)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at lombok.launch.ShadowClassLoader.loadClass(ShadowClassLoader.java:422)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 55 more
1 warning
"; SQL statement:
CREATE ALIAS GETTEXT AS'
String getText(Long textId, String langId) {
    return "testText";
}' [42000-191] 

当我添加系统属性-Dlombok.disable=true 来运行配置时,测试会正确执行。
问题是:如何配置 IntelliJ 以便能够在其中运行 JUnit 测试,或者如何设置 JUnit 测试的全局属性以禁用 lombok?

【问题讨论】:

    标签: intellij-idea junit lombok


    【解决方案1】:

    您可以添加任何系统属性以在 IntelliJ 中运行配置。要将其作为默认设置,您可以在同一对话框中将属性添加到 JUnit 默认配置(从“默认”类别中选择 JUnit 或按“编辑默认值”按钮)。

    这就是您关于全局属性的问题的答案。但是,修复测试设置以简单地运行 woyld 会更好。但是,暂时无法提供帮助。

    【讨论】:

    • 是的,默认配置应该可以工作,但这不会影响我现有的配置
    • 确实如此,但至少所有新创建的都是这样。
    【解决方案2】:

    您是否添加了 Lombok 插件并开启了注解处理(设置 -> 构建、执行、部署 -> 编译器 -> 注解处理器 -> 复选框“启用注解处理”)?

    【讨论】:

    • 是的,我试过了,但没有效果(即使在 Idea 重新启动后)。只启用处理就足够了还是需要额外的配置?
    • @bilak,我没有做任何额外的配置
    【解决方案3】:

    需要添加如下依赖:

    <dependency>
        <groupId>com.sun</groupId>
        <artifactId>tools</artifactId>
        <scope>system</scope>
        <version>1</version>
        <systemPath>${java.home}/../lib/tools.jar</systemPath>
    </dependency>
    

    查看issue 1058 in Project Lombok 以及问题/答案Compiling a Java Class in memory with `lombok` annotations and Java JDK 8

    【讨论】:

    • 这是我以前的。不幸的是,这对于 PMD 来说是不行的,所以我从这个切换到另一个配置。当我编写标准 maven 构建工作正常时,我在 IntelliJ 中只有问题
    • 问题在于 H2 尝试为您的 ALIAS 调用 Java 编译器,并且它没有以包含所有内容的方式调用它。抛开这个故障分析,恐怕帮不上什么忙了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 2016-04-17
    相关资源
    最近更新 更多