我可以使用 Immutables 类作为 gradle 插件扩展吗

问题描述

我正在用 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 类。有什么办法可以让它发挥作用吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...