Как добавить зависимости в библиотеку kotlin? - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь создать библиотеку 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-сопрограмма-ядро: 1.1.0
  • org.java-WebSocket: Java-WebSocket: 1.4.0
  • com.beust: клаксон: 5.0.5
  • org.slf4j: SLF4J-jdk14: 1.7.26

теперь, когда я запускаю свое тестовое приложение, оно выдает ошибку, что нет класса с именем WebSocketClient, который является частью пакета org.java-websocket:Java-WebSocket:1.4.0 и также является основой всей моей библиотеки.

Когда я добавляю перечисленные пакеты к зависимостям моего тестового приложения, оно отлично работает. Так есть ли способ, которым я мог бы определить в своей библиотеке, что приложения, использующие его, будут также автоматически зависеть от пакетов, от которых зависит моя библиотека?

1 Ответ

2 голосов
/ 28 апреля 2019

Вы объявили библиотеку Java-WebSocket как зависимость вашей библиотеки, используя конфигурацию implementation.

Эта конфигурация означает: мне нужно, чтобы мой код работал, но это деталь реализации, и поэтому она не является частью моего открытого API, поэтому пользователи моей библиотеки не будут иметь к ней доступ в своих compile classpath.

Поэтому Gradle, когда он генерирует файл pom.xml для вашей библиотеки, добавляет Java-WebSocket как время выполнения , а не как скомпилируйте зависимость.

Прочитайте документацию к плагину java-библиотеки , которая подробно объясняет все это.Как только вы поняли это, используйте api вместо implementation в файле build.gradle.kts вашей библиотеки для зависимостей, которые являются частью вашего API, и, таким образом, должны быть зависимостями компиляции, а не зависимостями времени выполнения:

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