У меня возникли проблемы с проектом Kotlin Multiplatform с Compose Desktop.

Вопрос или проблема

Я пытаюсь создать исполняемый файл (предпочтительно .exe) с помощью Compose Desktop и Kotlin Multiplatform, согласно этому источнику.

  • build.gradle.kts:
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
import org.gradle.api.tasks.Copy

plugins {
    kotlin("multiplatform") version "1.8.21"
    id("org.jetbrains.compose") version "1.6.11"
}

repositories {
    mavenCentral()
    maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
    google()
}

kotlin {
    jvm {
        compilations.all {
            kotlinOptions {
                jvmTarget = "17"
            }
        }
    }
    sourceSets {
        val jvmMain by getting {
            dependencies {
                implementation(compose.desktop.currentOs)
                implementation("com.google.code.gson:gson:2.11.0")
            }
        }
    }
}

compose.desktop {
    application {
        mainClass = "MainKt"

        nativeDistributions {
            targetFormats(TargetFormat.Exe)
            windows {
                packageVersion = "1.0.0"
                exePackageVersion = "1.0.0"
                installationPath = "${System.getenv("USERPROFILE")}\\DecoderISO8583"
            }
        }
    }
}

// Задача для копирования папки "packager"
val copyPackagerFolder by tasks.register<Copy>("copyPackagerFolder") {
    from("src/main/resources/packager") {
        include("**/*.json")
    }

    into("${System.getenv("USERPROFILE")}\\DecoderISO8583\\packager")

    doFirst {
        val installationDir = file("${System.getenv("USERPROFILE")}\\DecoderISO8583")
        if (!installationDir.exists()) {
            installationDir.mkdirs()
        }
        val packagerDir = file("${System.getenv("USERPROFILE")}\\DecoderISO8583\\packager")
        if (!packagerDir.exists()) {
            packagerDir.mkdirs()
        }
    }
}

// Убедитесь, что пользовательская задача выполняется после упаковки дистрибуции
tasks.named("package") {
    finalizedBy(copyPackagerFolder)
}
  • settings.gradle.kts:
- pluginManagement {
    repositories {
        mavenCentral()
        google()
        gradlePluginPortal()
        maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
    }

    plugins {
        id("org.jetbrains.kotlin.jvm").version("1.8.21") // Совпадение с версией, используемой в build.gradle.kts
        id("org.jetbrains.compose").version("1.6.11") // Использовать плагин Compose
    }
}

rootProject.name = "DecoderISO8583"
  • gradle.properties:
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
kotlin.code.style=official
kotlin.version=1.8.21 // Совпадение с версией Kotlin, используемой в build.gradle.kts
compose.version=1.6.11
kotlin.compiler.execution.strategy=in-process
org.gradle.warning.mode=all

Когда я пытаюсь создать исполняемый файл, согласно Compose Desktop, задачи показывают на этих изображениях:
введите описание изображения здесь

введите описание изображения здесь

Я много раз получаю эту проблему:

Файл сборки ‘C:\Users\xxxxx\OneDrive\Documents\xxxxxxx\DecoderXXXXXXX\build.gradle.kts’ строка: 69

Задача с именем ‘package’ не найдена в корневом проекте ‘DecoderISO8583’.

  • Попробуйте:

Запустите с опцией –stacktrace для получения трассировки стека.
Запустите с опцией –info или –debug для получения более подробного вывода.
Запустите с опцией –scan для получения полных сведений.
Получите дополнительную помощь на https://help.gradle.org.

Не имеет значения, каково название задачи Compose Desktop, я получаю ту же ошибку с другим именем задачи.

Моя цель – создать .exe с подключенной внешней папкой, называемой “packager”, которая будет прекрасно работать во время выполнения программы.

Если вы сможете быть более конкретным и детальным. Я очень благодарен вам.

Я надеюсь на решение этой проблемы, с которой мне сложно найти выход. Мне хотелось бы получить объяснение и код, если это возможно.

Ответ или решение

Для решения вашей проблемы с созданием исполняемого файла .exe с использованием Compose Desktop и Kotlin Multiplatform в вашем проекте, давайте разберем основные шаги и устраним возникшую ошибку.

Шаги для решения проблемы

  1. Проверьте структуру проекта.
    Убедитесь, что ваш проект имеет правильную структуру, необходимую для сборки Kotlin Multiplatform. Ваша папка должна выглядеть следующим образом:

    DecoderISO8583/
    ├── build.gradle.kts
    ├── settings.gradle.kts
    ├── gradle.properties
    ├── src/
    │   ├── jvmMain/
    │   │   └── kotlin/  // Ваши файлы с кодом
    │   ├── jvmTest/
    │   │   └── kotlin/  // Тесты
    │   └── main/resources/
    │       └── packager/  // Ваши ресурсы
  2. Добавьте необходимые зависимости и плагины.
    Убедитесь, что ваши плагины и зависимости в build.gradle.kts прописаны корректно. Ваш файл выглядит в целом правильно, но перепроверьте, чтобы не было лишних символов или опечаток.

  3. Проверьте версию Gradle.
    Используйте версию Gradle, совместимую с Kotlin 1.8.21 и Compose 1.6.11. Например, gradle-wrapper.properties может выглядеть так:

    distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
  4. Запуск процессов сборки.
    Вы можете вызвать сборку с помощью следующей команды в вашем терминале:

    ./gradlew build

    Если вы всё сделали правильно, должно произойти создание артефактов.

  5. Проверьте конфигурацию задачи ‘package’.
    Если Gradle выдаёт ошибку "Task with name ‘package’ not found", проверьте, есть ли у вас определение задачи package в вашем скрипте. Храните его в правильном блоке.

    Так же, убедитесь, что вызываете задачу package после успешной сборки проекта. Например:

    ./gradlew package
  6. Отладка ошибки.
    Если ошибка сохраняется, попробуйте запустить Gradle с ключами --info или --debug, чтобы получить более детальную информацию о том, что именно идет не так:

    ./gradlew package --info

Рекомендуемый код build.gradle.kts

Убедитесь, что build.gradle.kts соответствует следующим требованиям:

import org.jetbrains.compose.desktop.application.dsl.TargetFormat

plugins {
    kotlin("multiplatform") version "1.8.21"
    id("org.jetbrains.compose") version "1.6.11"
}

repositories {
    mavenCentral()
    maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
}

kotlin {
    jvm {
        compilations.all {
            kotlinOptions {
                jvmTarget = "17"
            }
        }
    }

    sourceSets {
        val jvmMain by getting {
            dependencies {
                implementation(compose.desktop.currentOs)
                implementation("com.google.code.gson:gson:2.11.0")
            }
        }
    }
}

compose.desktop {
    application {
        mainClass = "MainKt"

        nativeDistributions {
            targetFormats(TargetFormat.Exe)
            windows {
                packageVersion = "1.0.0"
                exePackageVersion = "1.0.0"
                installationPath = "${System.getenv("USERPROFILE")}\\DecoderISO8583"
            }
        }
    }
}

Заключение

После выполнения всех вышеперечисленных шагов попробуйте снова запустить сборку и создать .exe файл. Если у вас возникнут дополнительные ошибки, используйте вывод командной строки для диагностики или предоставьте более подробную информацию об ошибках, чтобы можно было более точно помочь вам.

Оцените материал
Добавить комментарий

Капча загружается...