看着试图使用GWT-杰克逊公寓库做一定的RPC,但在例子看时,试图运行一些演示总有一个奇怪的未定义构造函数调用接口。
@JSONMapper
public interface SampleMapper extends ObjectMapper<SimpleBean> {
SampleMapper INSTANCE = new App_SampleMapperImpl();
}
我一直在周围挖掘,但没有App_SampleMapperImpl的()定义在源代码中的任何地方。而且它不会编译,说是有一个未定义的符号
同样的事情在它可以在此页中找到的自述文件的例子做:qazxsw POI
谁能解释这是怎么回事?而如何定义这个构造函数,或暗示的保证?什么做我需要做的让这个例子编译?
假设你是一个Maven项目,最重要的是,包括注解处理器产生的映射器。然后,一旦该项目知道如何生成它们,你就可以在你的代码中使用它们。
注释处理器而编译器运行的,这意味着你在技术上可以编写不出现它将编译代码运行。然后,因为编译器运行时,它要求所有注册注释处理器取悦基于注释和现有类型(并不像你想象的https://github.com/DominoKit/gwt-jackson-apt/tree/f60d0358b90bcbf78d066796f680aeae1d7156bb丢失的引用)的代码。然后,处理器上运行,产生丢失类,然后编译继续。
通常发生的事情是,你建立在编写代码时(日食,例如,这并在每次保存文件时,的IntelliJ做它,当你问一个构建,等等),然后在类存在,可以参考向前发展。即使项目清理和重建,而参考好像它不应该工作,将尽快编译器运行工作。
在这种情况下,我们需要效仿的榜样,确保了处理器。在App_Sample_MapperImpl
,我们看到这款的依赖关系:
https://github.com/DominoKit/gwt-jackson-apt/blob/f60d0358b90bcbf78d066796f680aeae1d7156bb/samples/shared-mappers/shared-mappers-shared/pom.xml
此标记 <dependency>
<groupId>org.dominokit.jackson</groupId>
<artifactId>jackson-apt-processor</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
,因为它只需要编译,那么不应该包括在以后的依赖关系图。对于每一个特定的IDE,你可能需要指定其他选项让它自动重新运行(Eclipse的一个复选框,没什么的IntelliJ我相信,和我没有使用其他的IDE中过长的说)。
Maven的最后一点:你必须使用一个相对较新的Maven的编译器插件,这样生成的代码正确处理:最新的是3.8.0,发布2018年7月,但我觉得3.5.1以后什么就足够了,如果你必须使用一老一。
只要按照该项目的主要页面上的例子:scope=provided
那样有用吗 ?