agrosner
02/14/2023, 7:15 PM> No matching variant of project :domain was found. The consumer was configured to find a usage of 'apollo-used-coordinates' of a component, as well as attribute 'com.apollographql.service' with value 'api' but
but we only use the service from api2
in that module.mbonnin
02/14/2023, 10:16 PMagrosner
02/15/2023, 12:05 AMschema
module1 -> schema
module2 -> schema
where:
schema: service("api1", "api2")
module1: service("api1", "api2")
module2: service("api2")
module1 and module2 add apolloSchema
+ implementation
on schema
while schema
declares apolloUsedCoordinates
of each module1
and module2
mbonnin
02/15/2023, 5:45 PMdependencies {
add("apolloApi1UsedCoordinatesConsumer", project(":module1"))
add("apolloApi2UsedCoordinatesConsumer", project(":module1"))
add("apolloApi2UsedCoordinatesConsumer", project(":module2"))
}
agrosner
02/18/2023, 9:12 PMmbonnin
02/19/2023, 12:46 AMagrosner
02/27/2023, 3:40 PM/**
* Declares apollo used coordinates for our schema. Rather than defining a bunch of "always generate types"
*/
fun DependencyHandler.api1(
vararg projects: ProjectDependency,
) {
projects.forEach { apolloUsed("api1", it) }
}
fun DependencyHandler.apolloUsed(service: String, project: ProjectDependency) {
add("apollo${service.capitalized()}UsedCoordinatesConsumer", project)
}
then we just queue it up:
api1(
project(":homepage-graphql"),
project(":homepage-**-graphql"),
project(":**-graphql"),
)
implementation
on our schema alongside apolloSchema
, and apolloMetadata
apolloSchemaConsumer(project(":schema"))
that does implementation
, apolloSchema
and apolloMetadata
mbonnin
02/27/2023, 3:45 PM# feature
apollo {
service("service") {
packageName.set("feature")
dependsOn(project(":schema")
}
}
# schema
apollo {
service("service") {
packageName.set("schema")
# naming is up for grabs
isADependencyOf(project(":feature")
}
}
isADependencyOf
completely optional but I didn't find a way for this with Gradle configuration cache and proejct isolation aruondagrosner
02/27/2023, 4:16 PMapolloSchema
? im guessing yesmbonnin
02/27/2023, 4:18 PMagrosner
02/27/2023, 4:20 PMmbonnin
02/27/2023, 4:20 PMagrosner
02/27/2023, 4:21 PMmbonnin
02/27/2023, 4:23 PMagrosner
02/27/2023, 4:23 PMapolloApi1UsedCoordinatesConsumer
. Hit build, and run into this error:
> java.io.FileNotFoundException: /Users/**/project/**-graphql/build/generated/usedCoordinates/apollo/api1/usedCoordinates.json (No such file or directory)
generateApiApolloUsedCoordinates
itll then workmbonnin
02/27/2023, 4:23 PMagrosner
02/27/2023, 4:24 PMmbonnin
02/27/2023, 4:25 PMagrosner
02/27/2023, 4:26 PMmbonnin
02/27/2023, 4:26 PMagrosner
02/27/2023, 4:27 PMmbonnin
02/27/2023, 4:27 PMagrosner
02/27/2023, 4:27 PMmbonnin
02/27/2023, 4:28 PMagrosner
02/27/2023, 4:42 PMIf you're interested, we could even run a joint blog post or something. I feel like there's a lot to tell about the modularization story with GraphQL and you're way ahead of many teams
would be happy to chat about it