kmp-resources-plugin

Generates type-safe, build-time resource access for cross-platform projects, producing platform-specific resource objects and helpers, with override strategies, configurable package and resource-folder naming.

JVMKotlin/NativeWasmJS
GitHub stars0
AuthorsLimeBeck
Open issues0
Creation date3 months ago

Last activity3 months ago
Latest release0.2.0 (3 months ago)

Kotlin Multiplatform Resources Gradle Plugin

Gradle Plugin Portal

Gradle plugin for providing build-time multiplatform resources for Kotlin applications.

Usage

build.gradle.kts:

plugins {
    kotlin("multiplatform") version "2.0.0"
    id("dev.limebeck.kmp-resources") version "0.0.3"
}

kotlin {
    sourceSets.commonMain.dependencies {
        implementation("dev.limebeck:kmp-resources-core:0.0.3")
    }
}

kmpResources {
    // Optional: Package name for generated classes. Default is "dev.limebeck.res"
    packageName.set("dev.limebeck.example.res") 
    
    // Optional: Name of the folder in src/<sourceSet>/ containing resources. Default is "resources"
    resourcesFolderName.set("resources") 
    
    // Optional: Strategy for handling resource overrides between source sets. Default is OVERRIDE
    // OVERRIDE - files in child source sets override files in parent source sets
    // USE_COMMON - keep files from parent source sets
    // FAIL - throw exception on duplicate
    overrideStrategy.set(dev.limebeck.kmpResources.ResourceOverrideStrategy.OVERRIDE)

    // Optional: Generate resources on project sync. Default is true
    generateOnSync.set(true)
}

It will generate code like this (for src/commonMain/resources/image.png):

package dev.limebeck.example.res

import dev.limebeck.kmpResources.ResourceDirectory
import dev.limebeck.kmpResources.ResourceFile
import dev.limebeck.kmpResources.ResourceItem
import kotlin.String
import kotlin.collections.List

public expect object Res : ResourceDirectory {
  override val name: String

  override val items: List<ResourceItem>

  public val image: ResourceFile
}

You can use resources in your code:

import dev.limebeck.example.res.Res

fun main() {
    val imageName = Res.image.name
    val imageType = Res.image.type
    val imageBytes = Res.image.readBytes()
}

Example available in example/build.gradle.kts and example/src/linuxX64Test/kotlin/ResourcesTest.kt

JVMKotlin/NativeWasmJS
GitHub stars0
AuthorsLimeBeck
Open issues0
Creation date3 months ago

Last activity3 months ago
Latest release0.2.0 (3 months ago)

Kotlin Multiplatform Resources Gradle Plugin

Gradle Plugin Portal

Gradle plugin for providing build-time multiplatform resources for Kotlin applications.

Usage

build.gradle.kts:

plugins {
    kotlin("multiplatform") version "2.0.0"
    id("dev.limebeck.kmp-resources") version "0.0.3"
}

kotlin {
    sourceSets.commonMain.dependencies {
        implementation("dev.limebeck:kmp-resources-core:0.0.3")
    }
}

kmpResources {
    // Optional: Package name for generated classes. Default is "dev.limebeck.res"
    packageName.set("dev.limebeck.example.res") 
    
    // Optional: Name of the folder in src/<sourceSet>/ containing resources. Default is "resources"
    resourcesFolderName.set("resources") 
    
    // Optional: Strategy for handling resource overrides between source sets. Default is OVERRIDE
    // OVERRIDE - files in child source sets override files in parent source sets
    // USE_COMMON - keep files from parent source sets
    // FAIL - throw exception on duplicate
    overrideStrategy.set(dev.limebeck.kmpResources.ResourceOverrideStrategy.OVERRIDE)

    // Optional: Generate resources on project sync. Default is true
    generateOnSync.set(true)
}

It will generate code like this (for src/commonMain/resources/image.png):

package dev.limebeck.example.res

import dev.limebeck.kmpResources.ResourceDirectory
import dev.limebeck.kmpResources.ResourceFile
import dev.limebeck.kmpResources.ResourceItem
import kotlin.String
import kotlin.collections.List

public expect object Res : ResourceDirectory {
  override val name: String

  override val items: List<ResourceItem>

  public val image: ResourceFile
}

You can use resources in your code:

import dev.limebeck.example.res.Res

fun main() {
    val imageName = Res.image.name
    val imageType = Res.image.type
    val imageBytes = Res.image.readBytes()
}

Example available in example/build.gradle.kts and example/src/linuxX64Test/kotlin/ResourcesTest.kt