从命令行编译时,apollo-client-maven-plugin生成的代码无法解析

p1tboqfb  于 2023-02-03  发布在  Maven
关注(0)|答案(1)|浏览(84)

我无法让apollo-client-maven-plugin从命令行编译kotlin中的类。我不知道这个问题是由于插件配置,或者是不正确的,丢失的,或者冲突的依赖关系。我希望能有一些建议来给我指出正确的方向。
当 * targetLanguage * 值设置为JAVA,并且我运行mvn clean verify -U时,内省工作,代码生成,测试通过。但是,当我将 * targetLanguage * 配置为KOTLIN_1_5时,它无法编译。项目无法编译,"Unresolved reference:graphql " and "在测试-编译阶段,没有足够的信息来推断类型变量D " 错误。尽管如此,我仍然能够在Intellij IDEA中运行测试。测试编译、运行并通过。在IDE中通过测试后,我可以从命令行运行mvn verify,测试将通过,直到下一个干净的构建。

  • 这是一个多模块java + kotlin项目的一部分,所以我不认为maven-kotlin-plugin本身有问题。
  • 我在项目中编写了一个健全性测试。这是一个遇到导入问题的类。我试着将这个测试移到一个子项目中,但是我在下游遇到了同样的问题。
  • 我尝试过交换不同的运行时依赖项:阿波罗运行时、阿波罗运行时JVM和阿波罗运行时Kotlin。
  • 我试过在pom中设置kotlin插件的语言级别和版本为1.5。

apollo-client项目的pom.xml

<dependencies>
        <dependency>
            <groupId>com.mycompany.testing</groupId>
            <artifactId>automation-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.apollographql.apollo3</groupId>
            <artifactId>apollo-api</artifactId>
            <version>3.7.3</version>
        </dependency>
        <dependency>
            <groupId>com.apollographql.apollo3</groupId>
            <artifactId>apollo-runtime-jvm</artifactId>
            <version>3.7.3</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>com.github.aoudiamoncef</groupId>
                <artifactId>apollo-client-maven-plugin</artifactId>
                <version>5.0.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <services>
                                <myServer>
                                    <sourceFolder>${project.basedir}/src/main/graphql/myServer
                                    </sourceFolder>
                                    <schemaPath>
                                        ${project.basedir}/src/main/graphql/myServer/schema.json
                                    </schemaPath>
                                    <includes>
                                        <include>**/*.graphql</include>
                                        <include>**/*.gql</include>
                                        <include>**/*.json</include>
                                        <include>**/*.sdl</include>
                                    </includes>
                                    <compilationUnit>
                                        <name>myServer</name>

                                        <outputDirectory>
                                            ${project.build.directory}/generated-sources/graphql-client/myServer/
                                        </outputDirectory>
                                        <testDirectory>
                                            ${project.build.directory}/generated-sources/graphql-client/myServer/test/
                                        </testDirectory>
                                        <debugDirectory>
                                            ${project.build.directory}/generated-sources/graphql-client/myServer/debug/
                                        </debugDirectory>
                                        <operationOutputFile>
                                            ${project.build.directory}/generated/operationOutput/apollo/universe/operationOutput.json
                                        </operationOutputFile>
                                        <generateOperationDescriptors>true
                                        </generateOperationDescriptors>
                                        <compilerParams>
                                            <rootFolders>
                                                <rootFolder>
                                                    ${project.basedir}/src/main/graphql/myServer/
                                                </rootFolder>
                                            </rootFolders>
                                            <schemaPackageName>
                                                com.mycompany.automation.graphql.client
                                            </schemaPackageName>
                                            <packageName>com.mycompany.automation.graphql.client
                                            </packageName>
                                            <codegenModels>OPERATION</codegenModels>
                                            <flattenModels>true</flattenModels>
                                            <generateApolloMetadata>true</generateApolloMetadata>
                                            <generateAsInternal>true</generateAsInternal>
                                            <generateFilterNotNull>false</generateFilterNotNull>
                                            <generateFragmentImplementations>true
                                            </generateFragmentImplementations>
                                            <generateKotlinModels>true</generateKotlinModels>
                                            <generateOptionalOperationVariables>false
                                            </generateOptionalOperationVariables>
                                            <generateQueryDocument>true</generateQueryDocument>
                                            <generateResponseFields>false</generateResponseFields>
                                            <generateSchema>false</generateSchema>
                                            <generateTestBuilders>false</generateTestBuilders>
                                            <moduleName>apollographql</moduleName>
                                            <targetLanguage>KOTLIN_1_5</targetLanguage>
                                        </compilerParams>
                                    </compilationUnit>
                                    <introspection>
                                        <enabled>true</enabled>
                                        <endpointUrl>${introspection.endpoint.url}</endpointUrl>
                                        <schemaFile>${introspection.schema.file}</schemaFile>
                                        <prettyPrint>true</prettyPrint>
                                    </introspection>
                                </myServer>
                            </services>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

父项目的maven插件配置条目

<plugin>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-maven-plugin</artifactId>
        <version>1.7.22</version>
        <executions>
          <execution>
            <id>compile</id>
            <goals>
              <goal>compile</goal>
            </goals>
            <configuration>
              <nowarn>true</nowarn>
              <sourceDirs>
                <sourceDir>${project.basedir}/src/main/kotlin</sourceDir>
                <sourceDir>${project.basedir}/src/main/java</sourceDir>
              </sourceDirs>
            </configuration>
          </execution>

          <execution>
            <id>test-compile</id>
            <goals>
              <goal>test-compile</goal>
            </goals>
            <configuration>
              <sourceDirs>
                <sourceDir>${project.basedir}/src/test/kotlin</sourceDir>
                <sourceDir>${project.basedir}/src/test/java</sourceDir>
              </sourceDirs>
            </configuration>
          </execution>
        </executions>
      </plugin>

编译堆栈跟踪

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.jetbrains.kotlin:kotlin-maven-plugin:1.5.20:test-compile (test-compile) on project automation-graphql-support: Compilation failure
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:375)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:351)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:215)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:171)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:163)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:298)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:960)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:293)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:196)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:566)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
Caused by: org.jetbrains.kotlin.maven.KotlinCompilationFailureException: Compilation failure
    at org.jetbrains.kotlin.maven.MavenPluginLogMessageCollector.throwKotlinCompilerException (MavenPluginLogMessageCollector.java:111)
    at org.jetbrains.kotlin.maven.KotlinCompileMojoBase.execute (KotlinCompileMojoBase.java:212)
    at org.jetbrains.kotlin.maven.K2JVMCompileMojo.execute (K2JVMCompileMojo.java:222)
    at org.jetbrains.kotlin.maven.KotlinTestCompileMojo.execute (KotlinTestCompileMojo.java:84)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:370)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:351)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:215)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:171)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:163)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:298)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:960)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:293)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:196)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:566)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)

版本:

  • 阿波罗运行时/阿波罗运行时JVM:3.7.3
  • 阿波罗-运行时-Kotlin:3.0.0-dev12
  • 阿波罗-应用程序接口/阿波罗-应用程序接口-JVM:3.7.3
  • apollo-client-maven插件:5.0.0
  • java:www.example.com(父pom)11.0.16.1 (parent pom)
  • kotlin-maven-插件:1.7.22(母体POM)
  • 考特林反射:1.7.22(母体POM)
  • kotlin标准库:1.7.22(母体POM)
z6psavjg

z6psavjg1#

我注意到自动生成的源代码没有被编译器拾取。在sourceDir条目中添加了生成代码的目标文件夹:

<sourceDirs>
                                <sourceDir>${project.build.directory}/generated-sources/graphql-client</sourceDir>
                                <sourceDir>${project.basedir}/src/main/kotlin</sourceDir>
                                <sourceDir>${project.basedir}/src/main/java</sourceDir>
                            </sourceDirs>

相关问题