如何将依赖项添加到kotlin库?

时间:2019-04-28 08:18:51

标签: kotlin discord

我正在尝试为不和谐的机器人构建一个kotlin库,该库可以在https://github.com/TheDrone7/discord-kt上找到,并发布到jcenter(bintray链接-https://bintray.com/thedrone7/discordKt/discord-kt)。该库也有一些依赖项。

当我将自己的库添加到测试应用程序时,未安装库的依赖项,并且开始出现一些错误。有没有一种方法可以指定库的依赖项,以便在用户使用我的库时自动安装它们?

编辑:-

因此,基本上我的测试应用的build.gradle.kts文件的依存关系部分在下面给出

dependencies {
    // Use the Kotlin JDK 8 standard library.
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    implementation("org.theDrone:discordKt:0.0.1a")

    // Use the Kotlin test library.
    testImplementation("org.jetbrains.kotlin:kotlin-test")

    // Use the Kotlin JUnit integration.
    testImplementation("org.jetbrains.kotlin:kotlin-test-junit")
}

我的图书馆依赖于以下软件包:-

  • org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.0
  • org.java-websocket:Java-WebSocket:1.4.0
  • com.beust:klaxon:5.0.5
  • org.slf4j:slf4j-jdk14:1.7.26

现在,当我运行测试应用程序时,它显示出一个错误,即没有名为WebSocketClient的类,它是org.java-websocket:Java-WebSocket:1.4.0包的一部分,也是整个库的基础。

当我将列出的软件包添加到测试应用程序的依赖项时,它可以很好地工作。那么,有没有一种方法可以在我的库中定义使用它的应用程序也将自动依赖于我的库所依赖的软件包?

1 个答案:

答案 0 :(得分:2)

您使用Java-WebSocket配置将implementation库声明为您的库的依赖项。

此配置意味着:我需要它才能使代码正常工作,但这是实现细节,因此它不是我的公共API的一部分,因此我的库用户将无法在其 compile <中访问它。 / em>类路径。

So Gradle在为您的库生成pom.xml文件时,将Java-WebSocket添加为运行时依赖项,而不添加为 compile 依赖项。

阅读java-library plugin documentation,其中详细说明了所有这些内容。一旦了解了它,就可以在库的build.gradle.kts文件中使用api而不是implementation来获取属于API的依赖项,因此应该是编译依赖项,而不是运行时依赖项:< / p>

api("org.java-websocket:Java-WebSocket:1.4.0")