当前位置: 首页 > 知识库问答 >
问题:

在构建Android应用程序时如何从gradle生成OpenAPI源代码

能业
2023-03-14

我试图生成我的REST API客户端Android使用OpenAPI生成器从build.gradle脚本。这样,我就不必每次规格改变时都运行生成器命令行。理想情况下,这将在我构建/组装我的应用程序时生成,源将最终在java(生成)文件夹中,在那里生成的源可以从代码中访问(这就是BuildConfig.java文件的情况)。

下面是他们官方GitHub的链接,这里是构建。我最终得到的gradle文件:

apply plugin: 'com.android.application'
apply plugin: 'org.openapi.generator'

...

openApiValidate {
    inputSpec = "$rootDir/app/src/main/openapi/my-api.yaml"
    recommend = true
}
openApiGenerate {
    generatorName = "java"
    inputSpec = "$rootDir/app/src/main/openapi/my-api.yaml"
    outputDir = "$buildDir/generated/openapi"
    groupId = "$project.group"
    id = "$project.name-openapi"
    version = "$project.version"
    apiPackage = "com.example.mypackage.api"
    invokerPackage = "com.example.mypackage.invoker"
    modelPackage = "com.example.mypackage.model"
    configOptions = [
        java8               : "true",
        dateLibrary         : "java8",
        library             : "retrofit2"
    ]
}
...

首先,我从未尝试过通过构建/组装任务生成API,即使我尝试添加:

compileJava.dependsOn tasks.openApiGenerate

assemble.dependsOn tasks.openApiGenerate

我生成源代码的唯一方法是手动触发openApiGenerate任务:

然后,当我以这种方式生成源代码时,它们最终会出现在build文件夹中,但无法从我的代码中访问,并且在java(generated)文件夹中不可见:

然后,为了使用API,我必须手动将生成的源文件复制/粘贴到我的项目源中。

即使我能够通过添加手动过程来解决这些问题,如果整个过程简单地自动化,它将更容易维护。我能够实现类似的结果与另一个工具,原型。事实上,每当我构建应用程序时,我的gradle任务都会被触发,源代码最终会出现在java(生成的)文件夹中,所以我不必做任何额外的工作。不过,这个任务要简单得多,所以我假设我不能用OpenAPI生成器复制的主要工作是由原型插件本身处理的。

共有1个答案

谷梁昊空
2023-03-14

您必须将生成源的路径指定为Gradle模块的自定义源集,在本例中为app,如下所述-https://developer.android.com/studio/build/build-variants#configure-源集。这样,Gradle会将您的源代码视为可从您的代码访问。

大概是这样的:

android {
  ...
  sourceSets {
    main {
      java.srcDirs = ['build/generated/openapi/src/main/java']
    }
  }
  ...
}
 类似资料:
  • 当我试图构建任务[:Android:GenerateDebugSources]时,Gradle被卡住了。 我已经让它运行了几个小时,但没有成功构建。

  • 我想创建一个gradle java应用程序,它从一个openAPI规范文件生成一个客户端,并使用该客户端。所以我用gradle init创建了一个java应用程序(类型:应用程序,语言:Java,DSL:groovy,测试框架:JUnit Jupiter,项目名称:简单-java-app,包结构:)。 我可以用一个包和一个类创建一个新的源文件夹。并使用以下 主类可以访问: 现在,我尝试对opena

  • 下载https://services.gradle.org/distributions/gradle-2.3-bin.zip 线程“main”javax.net.ssl.SSLHandShakeException中的异常: java.security.cert.CertificateException:找不到与services.gradle.org匹配的主题替代DNS名称。在sun.securit

  • 我可能在尝试做一些奇怪的事情,因为这似乎不是一个常见的问题(或者可能我问错了)。我原以为这会很简单。 基本上,我正在寻找的是一种方法,除了通过使用gradle openapi生成器插件: 我所尝试的是以下(以及相关的错误): 输入pec.set(www.example.com/openapi-doc) 实际代码如下所示:

  • 我使用jsonschema生成器基于我的POJO生成JSON模式文件。目前,我正在通过一个在<code>gradle构建</code>步骤中运行的测试来完成这项工作。这工作正常,但感觉不对,因为我所做的并不是测试任何东西。 我还找到了这个答案,其中详细说明了如何在上运行它,但这也不理想,因为它会在每次应用程序出现时毫无意义地执行它,但在我构建时不会。 因此,有没有一种方法可以告诉gradle(在中

  • 我目前正在使用JavaCC(与JavaCC gradle插件从这里)来生成我的一些源代码。项目的其余部分依赖于这些代码。如果我将项目导入IDEA或者清理项目,那么我会得到错误,因为找不到类。然而,构建项目是可行的。 是否可以修改 gradle 文件,以便 IntelliJ(可能还有其他编辑器)在分析代码之前知道生成这些源代码? 生成的代码保存在src/gen/java/中,生成代码的位置通过以下方