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 客户端无法连接到 GraphQL 服务器(http 调用执行失败)