Apollo Android 客户端 - 无法访问类路径上生成的类

Posted

技术标签:

【中文标题】Apollo Android 客户端 - 无法访问类路径上生成的类【英文标题】:Apollo Android Client - Cannot access generated classes on classpath 【发布时间】:2017-10-23 19:42:46 【问题描述】:

我已经成功生成了 Apollo 类,并且可以在构建目录中看到它们,但是它们在类路径中不可用。奇怪的是,生成的 Enum 可用,但类本身不可用。

运行 Apollo 的 Github 上提供的示例项目确实有效,但我看不出配置之间的差异。

下面的mcve。

https://github.com/michaeljq/graphQlMCVE

【问题讨论】:

为什么要编辑或引用build/generated源代码? 我不想编辑它,我想访问生成的类。与导入类一样。 您的 app/build.gradle 没有将其编译为依赖项。我认为您不能在代码中导入插件(至少我从未尝试过) 嗯,看起来不太对劲。 build/generated/source/apollo/ 内应该有包目录。 src/main/graphql/ 目录的内容是什么?如果它只是直接的 GraphQL 文档文件,则为生成的代码创建一组与您所需的 Java 包匹配的子目录,并将 GraphQL 文件移动到那里。 @CommonsWare 顺便说一句,github.com/michaeljq/graphQlMCVE/tree/master/app/src/main/… 【参考方案1】:

这是一个屏幕截图,可以更快地理解解决方案:

【讨论】:

这是一个不正确的图表,对我没有用。 commonsware 所说的是创建类似于我们当前架构层次结构的子文件夹。 this folder system 为我工作 @Andrii-Kovalchuk:如果内部模块(上面 img 中的 app)是 ant 项目,而外部 prj(GraphQlandroidInFull)在 gradle 中怎么办。在这种情况下,我们应该如何在内部模块中生成构建文件夹。我正在使用 apollo 客户端 3.1.0【参考方案2】:

现在,您拥有包含 GraphQL 文档的 src/main/graphql/。这意味着您的 Java 类将在没有 Java 包的情况下生成,这可能不是您想要的。

改为在src/main/graphql/ 下创建一个包树(例如src/main/graphql/apollotest/mq/apollotest/api/)。将 GraphQL 文档和 schema.json 移到那里。清理项目,您应该会发现 Apollo 生成的类可以在您选择的任何 Java 包中使用(例如,上面示例中的 apollotest.mq.apollotest.api)。

【讨论】:

我这样做了,但我仍然没有在我的项目中看到生成的.java 文件。我确实在build/generated/source/apollo/mypackage 目录中看到了它们。我仍然无法从 IDEA 中引用它们。可能是什么问题? @AdamArold:我不使用 IDEA。不知何故,你需要告诉它build/generated/source/apollo/ 有源代码要包含在你的项目中。 我觉得还是把它们复制到src/main/java文件夹比较好? 嗯,当您更改 GraphQL 架构、GraphQL 查询或升级 Apollo-Android 时,它们会重新生成。所以,恕我直言,最好教 IDEA 从生成的源目录中提取。否则,您将忘记再次手动复制它们。

以上是关于Apollo Android 客户端 - 无法访问类路径上生成的类的主要内容,如果未能解决你的问题,请参考以下文章

从子包访问生成的 Apollo 类 - Kotlin

Apollo 客户端无法连接到 GraphQL 服务器(http 调用执行失败)

apollo-android可以用作java客户端吗?

apollo-android可以用作java客户端吗?

Apollo 客户端 devtool 无法在反应本机应用程序中检测到 Apollo 客户端

如何在 GraphQL apollo-android 客户端中获取 HTTP 状态码