【问题标题】:Lombok @RequiredArgsConstructor not working in Android, but @AllArgsConstructor worksLombok @RequiredArgsConstructor 在Android 中不起作用,但@AllArgsConstructor 起作用
【发布时间】:2018-05-29 01:59:35
【问题描述】:

我使用的是 Android Studio 3.2 Canary 15 和 Gradle 3.0.1。 @AllArgsConstructor 有效,但 @RequiredArgsConstructor 无效。

build.gradle:

dependencies {
    implementation 'org.projectlombok:lombok:1.16.+'
    annotationProcessor 'org.projectlombok:lombok:1.16.+'
}

测试类:

@Data
//@AllArgsConstructor(staticName = "of") // Works!!
@RequiredArgsConstructor(staticName = "of") // Doesn't works!!
public class DataClassUsingLombok {
    @NonNull String data1;
    @NonNull int data2;
}

这是编译错误:

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesWithDesugarForDebug'.
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.RuntimeException: com.android.build.api.transform.TransformException: java.lang.RuntimeException: java.lang.RuntimeException: com.android.ide.common.process.ProcessException: Error while executing java process with main class com.google.devtools.build.android.desugar.Desugar with arguments ...
    at com.android.builder.profile.Recorder$Block.handleException(Recorder.java:55)
    at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:104)
    ...
    ... 106 more
Caused by: com.android.build.api.transform.TransformException: java.lang.RuntimeException: java.lang.RuntimeException: com.android.ide.common.process.ProcessException: Error while executing java process with main class com.google.devtools.build.android.desugar.Desugar with arguments ...
    at com.android.build.gradle.internal.transforms.DesugarTransform.transform(DesugarTransform.java:236)
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:222)
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:218)
    at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
    ... 122 more
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: com.android.ide.common.process.ProcessException: Error while executing java process with main class com.google.devtools.build.android.desugar.Desugar with arguments ... 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:593)
    at java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:677)
    at java.util.concurrent.ForkJoinTask.join(ForkJoinTask.java:720)
    at com.android.ide.common.internal.WaitableExecutor.waitForTasksWithQuickFail(WaitableExecutor.java:146)
    at com.android.build.gradle.internal.transforms.DesugarTransform.transform(DesugarTransform.java:230)
    ... 125 more
Caused by: java.lang.RuntimeException: com.android.ide.common.process.ProcessException: Error while executing java process with main class com.google.devtools.build.android.desugar.Desugar with arguments ... 
    at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1431)
    at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
    at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
    at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
    at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Caused by: com.android.ide.common.process.ProcessException: Error while executing java process with main class com.google.devtools.build.android.desugar.Desugar with arguments ... 
    at com.android.build.gradle.internal.process.GradleProcessResult.buildProcessException(GradleProcessResult.java:73)
    at com.android.build.gradle.internal.process.GradleProcessResult.assertNormalExitValue(GradleProcessResult.java:48)
    at com.android.build.gradle.internal.transforms.DesugarTransform.lambda$processNonCachedOnes$3(DesugarTransform.java:316)
    at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
    ... 4 more
Caused by: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_141\bin\java.exe'' finished with non-zero exit value 1
    at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:382)
    at com.android.build.gradle.internal.process.GradleProcessResult.assertNormalExitValue(GradleProcessResult.java:46)
    ... 6 more

使用这些注释的正确方法是什么?

【问题讨论】:

    标签: android lombok


    【解决方案1】:

    我相信@RequiredArgsConstructor 的工作原理是它会查找例如具有final 的任何字段。

    @RequiredArgsConstructor
    public class Person4 {
       private final long id;
       private String name;
       private int age;
    }
    

    会生产

        public class Person4 {
               private final long id;
               private String name;
               private int age;
    
               public Person4 (final long id) {
                  this.id = id;
     }
    }
    

    @AllArgsConstructor@RequireArgsConstructor 一起使用将产生另一个constructor,其中包含所有final 字段和非final 字段。 可以找到更多hereDocs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-17
      • 1970-01-01
      • 2020-01-29
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      • 2016-04-28
      • 2015-04-26
      相关资源
      最近更新 更多