rybalkinsd / kohttp

Kotlin DSL http client
https://kohttp.gitbook.io
Apache License 2.0
479 stars 42 forks source link

Scope "Runtime" for dependencies? #66

Closed jschneider closed 5 years ago

jschneider commented 5 years ago

I am sure you have good reasons for. But it took me longer than I am willing to admit to figure out why "okhttp3.Response" could not be resolved.

Could you either:

rybalkinsd commented 5 years ago

Hey @jschneider !

Could you please give me more details about the issue? The very best would be to get a code snippet. I tried to reproduce in a tiny gradle project, but failed.

rybalkinsd commented 5 years ago

Here is my test code

util.kt

package io.kohttp.test

import io.github.rybalkinsd.kohttp.dsl.httpGet

fun main(args: Array<String>) {
    val response: okhttp3.Response = httpGet {
        host = "google.com"
        path = "/search"
        param {
            "q" to "iphone"
            "safe" to "off"
        }
    }
    println(response.body()!!.string())
}

build.gradle.kts

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    kotlin("jvm") version "1.3.11"
}

group = "kohttp"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
}

dependencies {
    compile(kotlin("stdlib-jdk8"))
    compile(group = "io.github.rybalkinsd", name = "kohttp", version = "0.7.0")
}

val fatJar = task("fatJar", type = Jar::class) {
    manifest {
        attributes["Main-Class"] = "io.kohttp.test.UtilKt"
    }

    from(configurations.runtime.map({ if (it.isDirectory) it else zipTree(it) }))
    with(tasks["jar"] as CopySpec)
}

tasks.withType<KotlinCompile> {
    kotlinOptions.jvmTarget = "1.8"
}

tasks {
    "build" {
        dependsOn(fatJar)
    }
}
jschneider commented 5 years ago

https://github.com/jschneider/kohttp-bug-66

jschneider commented 5 years ago

Take a look at the generated pom: https://search.maven.org/artifact/io.github.rybalkinsd/kohttp/0.7.0/jar

The generated pom.xml contains that code:

<dependency>
      <groupId>com.squareup.okhttp3</groupId>
      <artifactId>okhttp</artifactId>
      <version>3.12.0</version>
      <scope>runtime</scope>
    </dependency>

I think scope = runtime is not the best

jschneider commented 5 years ago

https://github.com/gradle/gradle/issues/1118 which references https://youtrack.jetbrains.com/issue/KT-28355

There is a workaround described there. Don't know if it is worth it - maybe just wait for the bugfix upstream

rybalkinsd commented 5 years ago

related to an internal problem for API dependency and kotlin compiler bug

jschneider commented 5 years ago

Yeah, that is the bug I was referencing... Thanks for working around that issue.

rybalkinsd commented 5 years ago

@jschneider 0.7.1 is syncing to maven central now. Will be available in several hours