Сборка зависимостей Kotlin Jar клиента OpenApi с Gradle не распознается в моем проекте Android Kotlin Jetpack ComposeAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Сборка зависимостей Kotlin Jar клиента OpenApi с Gradle не распознается в моем проекте Android Kotlin Jetpack Compose

Сообщение Anonymous »

На самом деле я работаю над проектом с серверной частью в Kotlin Springboot с API, сгенерированным OpenApi (в формате yaml), который я хочу подключить к клиенту Android Jetpack Compose.
Что я делаю Я хочу сгенерировать из моего серверного проекта клиент openApi как зависимость Jar Kotlin и импортировать его в мой клиентский проект.
Вот сборка серверного градиента для достижения этапа 'генерация клиента/упаковка jar/локальная публикация maven':
Генерация внутреннего клиента:

Код: Выделить всё

tasks.register("generateKotlinClient", org.openapitools.generator.gradle.plugin.tasks.GenerateTask::class) {
generatorName.set("kotlin")
inputSpec.set("$rootDir/src/main/resources/api/api.yaml")
outputDir.set(layout.buildDirectory.dir("generated/grimoire-server-client").get().asFile.path)
invokerPackage.set("com.com.corbz.grimoire.backend.client")
packageName.set("com.com.corbz.grimoire.backend.client")
apiPackage.set("com.com.corbz.grimoire.backend.client.api")
modelPackage.set("com.com.corbz.grimoire.backend.client.model")

generateApiDocumentation.set(false)
generateModelDocumentation.set(false)
generateApiTests.set(false)
generateModelTests.set(false)

configOptions.set(
mapOf(
"sourceFolder" to "."
)
)
}

tasks.register("packageClientJar", Jar::class) {
group = "build"
val generatedClientDir = layout.buildDirectory.dir("generated/grimoire-server-client/com").get().asFile
from(generatedClientDir)
archiveBaseName.set("grimoire-backend-client")
archiveVersion.set("1.0.0")
destinationDirectory.set(layout.buildDirectory.dir("libs").get().asFile)
}

publishing {
publications {
create("grimoireBackendClient") {
groupId = "com.corbz"
artifactId = "grimoire-backend-client"
version = "1.0.0"

artifact(tasks.named("packageClientJar").get()) {
builtBy(tasks.named("packageClientJar"))
}
}
}
repositories {
maven {
name = "local"
url = uri("${System.getProperty("user.home")}/.m2/repository")
}
}
}
Он создает банку с папкой пакета и папкой манифеста. Мой проект Android организован с помощью основного файла build.gradle.kts/setting.gradle.kts, а мой код находится в пакете приложения с его собственным build.gradle.kts/setting.gradle.kts. В build.gradle.kts из пакета приложения моя библиотека импортируется следующим образом (я не помещал весь файл со всеми зависимостями, но именно так я импортирую клиентскую зависимость):

Код: Выделить всё

plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
}

android {
namespace = "com.corbz.grmoire.android"
compileSdk = 35

defaultConfig {
applicationId = "com.corbz.grmoire.android"
minSdk = 24
targetSdk = 35
versionCode = 1
versionName = "1.0"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}

compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}

kotlinOptions {
jvmTarget = "17"
}
buildFeatures {
compose = true
}
}

dependencies {

// Business dependencies --------------------------
implementation(libs.grimoire.backend.client)
implementation(libs.moshi)
implementation(libs.moshi.kotlin)
// ------------------------------------------------
}
По какой-то причине я не понимаю, библиотека распознается, я могу импортировать пакет следующим образом:

Код: Выделить всё

package com.corbz.grmoire.android.config

import android.app.Application
import dagger.hilt.android.HiltAndroidApp
import com.corbz.grimoire.backend.client.model.*

@HiltAndroidApp
class GrimoireApplication: Application() {

}
Но если я попытаюсь импортировать, например, GrimoireDto из этого пакета, он не распознается. Вот сгенерированный класс (kt) для моего GrimoireDto из зависимости клиента openApi:

Код: Выделить всё

@file:Suppress(
"ArrayInDataClass",
"EnumEntryName",
"RemoveRedundantQualifierName",
"UnusedImport"
)

package com.com.corbz.grimoire.backend.client.model

import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass

/**
*
*
* @param code Unique identifier for the grimoire.
* @param creationDate The creation date of the grimoire.
* @param lastUpdateDate The last update date of the grimoire.
*/

data class GrimoireDto (

/* Unique identifier for the grimoire. */
@Json(name = "code")
val code: kotlin.String,

/* The creation date of the grimoire. */
@Json(name = "creationDate")
val creationDate: java.time.OffsetDateTime,

/* The last update date of the grimoire. */
@Json(name = "lastUpdateDate")
val lastUpdateDate: java.time.OffsetDateTime

) {

}
Я не понимаю, почему этот класс Kotlin нельзя импортировать, поскольку это файл .kt. Для меня в этом классе нет ничего плохого, я также пытался импортировать дополнительные зависимости (например, mochi для клиента), чтобы все зависимости работали, но ничего не получалось.
Я даже пытаюсь сгенерировать с помощью генератора Android (для меня он должен работать с мультиплатформой Kotlin, но это было «для науки»), но проблема все еще остается тот то же самое.
Не могли бы вы помочь разобраться, что не так с моей генерацией/импортом? Я хотел бы импортировать этот клиент, чтобы избежать ручного написания клиентского вызова серверной части.
Заранее спасибо, ребята!

Подробнее здесь: https://stackoverflow.com/questions/793 ... ed-in-my-a
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»