1

我正在用 Java 编写一个 gradle 插件。为了使其可配置,我想定义一个扩展对象。由于这本质上是一个值对象,我想我会使用 Immutables 来定义类,以减少代码量。但是,这变得很困难,我想知道这是否可能?

我尝试的第一件事是定义一个简单的不可变类:

@Value.Immutable
public abstract class MyExtension {
  public abstract String someField();
}

然后将其添加为扩展名:

project.getExtensions()
       .create("extensionName", MyExtension.class);

这失败了:

> Failed to apply plugin 'my.plugin.id'.
   > Could not create an instance of type com.palantir.gotham.ontology.GothamOntologyFragmentsPluginExtension.
      > Could not generate a decorated class for type MyExtension.
         > Cannot have abstract method MyExtension.someField().

使用接口而不是抽象类定义不可变对象会产生相同的错误。然后我尝试通过不可变类代替,使用:

project.getExtensions()
       .create(TypeOf.typeOf(MyExtension.class), "extensionName", ImmutableMyExtension.class);

但是,这会失败并出现不同的错误:

> Failed to apply plugin 'my.plugin.id'.
   > Could not create an instance of type ImmutableMyExtension.
      > Class ImmutableMyExtension is final.

似乎 gradle 要求扩展类是可扩展的,而 immutables 总是生成final类。有什么办法可以让它工作吗?

4

0 回答 0