Hi, new here in kotlinlang slack, but I have a har...
# gradle
p
Hi, new here in kotlinlang slack, but I have a hard time finding any good documentation regarding adding a multi-platform library to jfrog artifactory. What I’ve found is that I should do like this:
Copy code
import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework
import org.jetbrains.kotlin.gradle.plugin.mpp.BitcodeEmbeddingMode
import org.jfrog.gradle.plugin.artifactory.dsl.PublisherConfig

plugins {
    kotlin("multiplatform") version "1.8.20"
    id("com.android.library")
    id("org.jetbrains.kotlinx.kover") version "0.7.1"
    id("org.kodein.mock.mockmp") version "1.14.0"
    id("maven-publish")
    id("com.jfrog.artifactory") version "5.0.3"
}

group = "com.company.mowerplatform"
version = "0.1-SNAPSHOT"

repositories {
    maven(url = "<https://url/libs-release>")
    mavenCentral()
    google()
}

tasks.named<Wrapper>("wrapper") {
    gradleVersion = "7.6"
}

mockmp {
    usesHelper = true
}

kotlin {
    targets.withType<org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget> {
        compilations.get("main").compilerOptions.options.freeCompilerArgs.add("-Xexport-kdoc")
    }
}

kotlin {
    val xcFrameworkName = "MowerPlatform"
    val xcFramework = XCFramework(xcFrameworkName)

    jvm {
        compilations.all {
            kotlinOptions.jvmTarget = "11"
        }
        testRuns["test"].executionTask.configure {
            useJUnitPlatform()
        }
    }
    ios {
        binaries.framework(xcFrameworkName) {
            embedBitcode(BitcodeEmbeddingMode.DISABLE)
            xcFramework.add(this)
        }
    }
    iosSimulatorArm64 {
        binaries.framework(xcFrameworkName) {
            embedBitcode(BitcodeEmbeddingMode.DISABLE)
            xcFramework.add(this)
        }
    }

    android {
        publishLibraryVariants("release", "debug")
    }

    sourceSets {
        val kermitVersion = "1.2.2"
        val kotlinxCoroutinesVersion = "1.7.1"
        val turbineVersion = "1.0.0"

        val commonMain by getting {
            dependencies {
                implementation("co.touchlab:kermit:$kermitVersion")
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlinxCoroutinesVersion")
            }
        }
        val commonTest by getting {
            dependencies {
                implementation(kotlin("test"))
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlinxCoroutinesVersion")
                implementation("app.cash.turbine:turbine:$turbineVersion")
            }
        }
        val iosMain by getting
        val iosArm64Main by getting {
            dependsOn(iosMain)
            dependencies {
                implementation("co.touchlab:kermit-iosarm64:$kermitVersion")
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-iosarm64:$kotlinxCoroutinesVersion")
            }
        }
        val iosX64Main by getting {
            dependsOn(iosMain)
            dependencies {
                implementation("co.touchlab:kermit-iosx64:$kermitVersion")
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-iosx64:$kotlinxCoroutinesVersion")
            }
        }
        val iosSimulatorArm64Main by getting {
            dependsOn(iosMain)
            dependencies {
                implementation("co.touchlab:kermit-iossimulatorarm64:$kermitVersion")
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-iossimulatorarm64:$kotlinxCoroutinesVersion")
            }
        }
        val jvmMain by getting
        val androidMain by getting {
            dependsOn(jvmMain)
        }
    }

    artifactory {
        setContextUrl("url")

        publish(delegateClosureOf<org.jfrog.gradle.plugin.artifactory.dsl.PublisherConfig> {
            repository(delegateClosureOf<PublisherConfig> {
                setProperty("repoKey", "libs-release-local")
                setProperty("maven", true)
            })
            defaults(delegateClosureOf<groovy.lang.GroovyObject> {
                invokeMethod("publications", "aar")
                setProperty("publishArtifacts", true)
                setProperty("publishPom", true)
            })
        })
    }
}

android {
    namespace = "com.company.multiplatform"
    compileSdk = 33
    sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
    buildFeatures {
        viewBinding = true
    }
    defaultConfig {
        minSdk = 26
        targetSdk = 33
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_11
        targetCompatibility = JavaVersion.VERSION_11
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}
But this gives me following error:
Copy code
e: build.gradle.kts:116:9: None of the following functions can be called with the arguments supplied: 
public open fun publish(p0: Closure<PublisherConfig!>!): Unit defined in org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention
public open fun publish(p0: Action<PublisherConfig!>!): Unit defined in org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention
Can someone point me the right direction?
🧵 1
a
hi, the error is happening with this code:
Copy code
publish(delegateClosureOf<org.jfrog.gradle.plugin.artifactory.dsl.PublisherConfig> {
Do you know where that came from? The example (under the 'Kotlin Format' section) https://github.com/jfrog/artifactory-gradle-plugin#-installation uses a different config block
p
Looking at that page my build script is complaining about: Unresolved reference: jfrog, so I’m basically stuck…
Copy code
import org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention
import org.jfrog.gradle.plugin.artifactory.task.ArtifactoryTask