我想使用 Apollo Android 查询 GitHub GraphQL api,将 Kotlin 与 Gradle Kotlin DSL 结合使用,但不在Android 上。
错误信息
我确实遇到了一个特定的问题,但这可能是因为我在其他地方的设置有问题。
总而言之,我有一个ViewLogin.graphql
文件,从中ViewLoginQuery
生成 a ,但是当我尝试使用时,ViewLoginQuery.builder()
就是unresolved reference: builder
问题所在。
设置
如https://github.com/apollographql/apollo-android/issues/1573中所述,应该可以在没有 Android 的情况下使用 Apollo Android。
环境
我正在使用 Arch Linux 和 IntelliJ,并安装了 JS GraphQL IntelliJ 插件。
Gradle Kotlin DSL 构建文件
在编写构建文件时,我已经遇到了一个问题:我没有设法避免使用已弃用 buildscript
的块。
https://plugins.gradle.org/plugin/com.apollographql.apollo中显示的插件显然是https://github.com/apollographql/apollo-android/issues/1573#issuecomment-575613238中提到的孵化插件这还没有准备好。
以下构建文件似乎正确应用了插件:
buildscript {
repositories {
maven {
url = uri("https://plugins.gradle.org/m2/")
}
jcenter()
}
dependencies {
classpath("com.apollographql.apollo:apollo-gradle-plugin:1.2.2")
}
}
apply(plugin = "com.apollographql.android")
plugins {
val kotlinVersion = "1.3.60"
application
kotlin("jvm") version kotlinVersion
java
idea
}
dependencies {
implementation(kotlin("stdlib"))
// Apollo and dependencies
implementation("com.apollographql.apollo:apollo-runtime:1.2.2")
implementation("com.squareup.okio:okio:2.4.3")
implementation("org.jetbrains:annotations:13.0")
testImplementation("org.jetbrains:annotations:13.0")
}
repositories {
mavenCentral()
mavenLocal()
jcenter()
}
tasks.withType<com.apollographql.apollo.gradle.ApolloCodegenTask> {
generateKotlinModels.set(true)
}
所以在同步之后,我就有了可用的 apollo Gradle 任务。
下载架构
我安装了Apollo cli 界面,然后按照Apollo docs运行
apollo schema:download --endpoint=https://api.github.com/graphql --header="Authorization: Bearer mytoken"
这给了我一个schema.json
我放进去的东西src/main/graphql/nl/mypackage/myapplication/schema.json
。
示例查询
我有一个文件src/main/graphql/nl/mypackage/myapplication/ViewLogin.graphql
,其中包含query ViewLogin { viewer { login }}
. viewer
IntelliJ 在和上都显示错误login
,说Unknown field "viewer" on object type "Query". Did you mean "viewer"?
. 但这可能是 JS GraphQL 插件的错误配置。我尝试通过添加一个文件来配置 JS src/main/graphql/nl/mypackage/myapplication/.graphqlconfig
GraphQL
{
"name": "GitHub GraphQL Schema",
"schemaPath": "schema.json",
"extensions": {
"endpoints": {
"Default GraphQL Endpoint": {
"url": "https://api.github.com/graphql",
"headers": {
"user-agent": "JS GraphQL"
},
"introspect": true
}
}
}
}
但错误仍然存在。
然后我执行了generateApolloClasses
生成build/generated/source/apollo/classes/main/nl/mypackage/myapplication/ViewLoginQuery.kt
文件的 Gradle 任务。当我打开该文件时,没有显示任何错误,并且一切正常。
执行查询
在一个文件src/main/kotlin/nl/mypackage/myapplication/GraphqlExample.kt
中,我尝试使用该查询,遵循https://www.apollographql.com/docs/android/essentials/get-started/#sumption-code上的文档,
但是当我尝试使用时,ViewLoginQuery.builder()
则builder
无法识别(通过IntelliJ,以及当我尝试运行它时)。
我尝试在 ViewLoginQuery 的超类中进行搜索,但找不到任何关于构建器的信息。