gpt4 book ai didi

java - GWT-Jackson-Apt 看似未定义的类构造函数调用

转载 作者:行者123 更新时间:2023-12-01 19:43:10 25 4
gpt4 key购买 nike

尝试使用 GWT-Jackson-Apt 库来执行某些 RPC,但是在查看示例并尝试运行一些演示时,总是会出现带有奇怪的未定义构造函数调用的接口(interface)。

 @JSONMapper
public interface SampleMapper extends ObjectMapper<SimpleBean> {
SampleMapper INSTANCE = new App_SampleMapperImpl();
}

来源:https://github.com/DominoKit/gwt-jackson-apt/blob/f60d0358b90bcbf78d066796f680aeae1d7156bb/samples/basic/basic-client/src/main/java/org/dominokit/jacksonapt/samples/basic/App.java

我一直在挖掘,但源代码中的任何地方都没有 App_SampleMapperImpl() 的定义。而且无法编译,说有一个 undefined symbol

自述文件的示例中完成了完全相同的操作,可以在此页面上找到:https://github.com/DominoKit/gwt-jackson-apt/tree/f60d0358b90bcbf78d066796f680aeae1d7156bb

谁能解释一下这是怎么回事?这个构造函数是如何定义或隐含的?我需要做什么才能使示例编译?

最佳答案

假设您正在制作一个 Maven 项目,重要的是包含生成映射器的注释处理器。然后,一旦项目知道如何生成它们,您就可以在代码中使用它们。

注释处理器在编译器运行时运行,这意味着从技术上讲,您可以编写看起来不会编译的代码。然后,当编译器运行时,它会要求所有已注册的注释处理器根据注释和现有类型生成代码(而不是您可能认为缺少的引用,例如 App_Sample_MapperImpl )。然后处理器运行,生成缺少的类,然后继续编译。

通常发生的情况是,您在编写代码时进行构建(例如,eclipse每次保存文件时都会执行此操作,intellij在要求构建时会执行此操作等),然后该类存在并且可以被引用向前走。即使项目被清理并重建,虽然引用看起来不应该工作,但只要编译器运行它就会工作。

<小时/>

在这种情况下,我们需要按照示例来确保处理器存在。在 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>

这被标记为scope=provided,因为它只需要编译,因此不应包含在以后的依赖关系图中。对于每个特定的 IDE,您可能需要指定其他选项以使其自动重新运行(Eclipse 中的一个复选框,我相信 IntelliJ 中没有任何内容,而且我已经很久没有使用其他 IDE 了)。

maven 的最后一点:您必须使用相对较新的 maven-compiler-plugin,以便正确处理生成的代码:最新版本是 3.8.0,于 2018 年 7 月发布,但我认为 3.5.1 之后的任何版本都足够了,如果您必须使用旧的。

关于java - GWT-Jackson-Apt 看似未定义的类构造函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54594140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com