java - 如何将来自 openapi-generator 的客户端包含在 gradle java 应用程序中?

标签 java gradle openapi openapi-generator

我想创建一个从 openAPI 规范文件生成客户端并使用该客户端的 gradle java 应用程序。
所以我用 gradle init 创建了一个 java 应用程序(类型:应用程序,语言:Java,DSL:groovy,测试框架:Junit Jupiter,项目名称:simple-java-app,包结构:a.aa)。
工作原理的小例子:
我可以创建一个新的源文件夹 second/loc/src/main/java带包裹b.bb和一个类(class)Foo .
并与以下 build.gradle

plugins {
    id 'java'
    id 'application'
}

repositories {
    jcenter()
}

sourceSets {
    second {
        java {
            srcDir 'second/loc/src/main/java'
        }
    }
}

compileJava {
    source += sourceSets.second.java
}

dependencies {
    implementation 'com.google.guava:guava:29.0-jre'
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.2'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.6.2'
}

application {
    mainClassName = 'a.aa.App'
}

test {
    useJUnitPlatform()
}
主类可以访问Foo :
package a.aa;

import b.bb.Foo;

public class App {

    public static void main(String[] args) {
        System.out.println(new Foo().sayFoo());
    }
}
什么不起作用
现在我对 openapi-generator 生成的代码尝试相同的方法:
plugins我加id "org.openapi.generator" version "4.3.1"我添加了一个新任务:
openApiGenerate {
    generatorName = "java"
    inputSpec = "$rootDir/specs/petstore.yaml".toString()
    outputDir = "$buildDir/generated".toString()
    apiPackage = "org.openapi.example.api"
    invokerPackage = "org.openapi.example.invoker"
    modelPackage = "org.openapi.example.model"
     configOptions = [
        dateLibrary: "java8"
    ]
}
然后我执行任务openApiGenerate并在文件系统中确认已生成源代码(eclipse 不会显示构建文件夹)。
现在我使用与上面相同的方法导致以下 build.gradle
plugins {
    id 'java'
    id 'application'
    id "org.openapi.generator" version "4.3.1"
}

repositories {
    jcenter()
}

openApiGenerate {
    generatorName = "java"
    inputSpec = "$rootDir/specs/petstore.yaml".toString()
    outputDir = "$buildDir/generated".toString()
    apiPackage = "org.openapi.example.api"
    invokerPackage = "org.openapi.example.invoker"
    modelPackage = "org.openapi.example.model"
    configOptions = [
        dateLibrary: "java8"
    ]
}

sourceSets {
    client {
        java {
            srcDir '$buildDir/generated/src/main/java'
        }
    }
}

compileJava {
    source += sourceSets.client.java
}

dependencies {
    implementation 'com.google.guava:guava:29.0-jre'
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.2'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.6.2'
}

application {
    mainClassName = 'a.aa.App'
}

test {
    useJUnitPlatform()
}
但是当我现在尝试使用这些类时:
package a.aa;

import org.openapi.example.model.Pet;

public class App {

    public static void main(String[] args) {
        Pet p = new Pet(0L);
        System.out.println(p.getId());
    }
}
既不进口也不Pet可以解决。
> Task :compileJava FAILED
C:\...\simple-java-app\src\main\java\a\aa\App.java:6: error: package org.openapi.example.model does not exist
import org.openapi.example.model.Pet;
                                ^
C:\...\simple-java-app\src\main\java\a\aa\App.java:14: error: cannot find symbol
        Pet p = new Pet(0);
        ^
  symbol:   class Pet
  location: class App
C:\...\simple-java-app\src\main\java\a\aa\App.java:14: error: cannot find symbol
        Pet p = new Pet(0);
                    ^
  symbol:   class Pet
  location: class App
3 errors

FAILURE: Build failed with an exception.
我不知道如何调试这个,坦率地说,我不确定源集是否是正确的方式。所有的openapi-generator教程好像都用过,我还没有试过子项目,openApiGenerate任务好像用build.gradle创建了一个完整的项目和所有。

最佳答案

您需要将生成的代码中的源添加到您的项目中。我的一个项目中的一个例子:sourceSets.main.java.srcDir "${buildDir}/generated/src/main/java"生成后确保刷新 gradle 和项目。

关于java - 如何将来自 openapi-generator 的客户端包含在 gradle java 应用程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63054564/

相关文章:

springdoc-openapi 在没有服务器的情况下生成 openapi yaml

django - 有没有办法更改 drf-spectaulous 中序列化器自动生成的架构名称

spring-boot - OpenApi 使用 JSON 发送 MultipartFile 请求获取 'application/octet-stream' 错误不支持

java - 寻找 Eclipse 的替代品(或没有所有错误的运行 eclipse 的方法)

android - 创建包含 javadoc 和源的 Android 库 AAR

gradle - Gradle-创建所有子项目的Tar

eclipse - Tomcat 没有启动 Gradle Webapp

java - 尽管有代理,Java PKIX/validator.ValidatorException 仍存在 SSL 问题

java - spring boot sql数据库DML和DDL脚本

java - 如何从 Espresso 中获取 View 以传递到 IdlingResource?