在内存类编译中使用H2的Lombok

时间:2016-12-01 10:16:33

标签: java h2 lombok

我们正在使用h2数据库(内存中,Oracle模式)进行单元测试。由于H2目前不支持Oracle拥有的TO_DATE方法(我们使用它)。我们在其中一个设置脚本中定义了以下内容:

CREATE ALIAS TO_DATE as '
import java.text.*;
@CODE
java.util.Date toDate(String s, String dateFormat) throws Exception {
  return new SimpleDateFormat(dateFormat).parse(s);
}
';

单元测试运行后,会抛出异常,如下所示:

Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "/org/h2/dynamic/TO_DATE.java:4: 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 TO_DATE {
       ^
    at lombok.javac.apt.LombokProcessor.init(LombokProcessor.java:84)
    at lombok.core.AnnotationProcessor$JavacDescriptor.want(AnnotationProcessor.java:87)
    at lombok.core.AnnotationProcessor.init(AnnotationProcessor.java:141)
    at lombok.launch.AnnotationProcessorHider$AnnotationProcessor.init(AnnotationProcessor.java:53)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.<init>(JavacProcessingEnvironment.java:500)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors$ProcessorStateIterator.next(JavacProcessingEnvironment.java:597)
    ....<more omitted>
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:283)
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:173)
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:128)
    at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203)
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
  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:418)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 113 more

看起来在我们的项目中使用lombok,它提供了一个不同的编译器,因此无法编译此类并且无法通过我们的测试用例。

如果我们删除lombok依赖项并且不使用任何lombok注释,它就可以正常工作。

我们可以做些什么来解决这个问题?

注意 :我从这个github问题中无耻地复制了文本:#1045。但我遇到了同样的问题,这个问题似乎总结得很好。

0 个答案:

没有答案