Как структурировать сборки Gradle, чтобы позволить создавать взаимозависимые библиотеки - PullRequest
0 голосов
/ 19 ноября 2018

Я создал небольшой небольшой тестовый проект, чтобы посмотреть, решит ли Gradle эту проблему, которая у нас есть с Maven.У нас есть 200 небольших библиотек, все из них - проекты Maven. Когда вы делаете чистую проверку, вам нужно mvn install каждая из них по отдельности

Чтобы смоделировать такой сценарий, я создал 4 модуля:

root
 - jvaas-gson
 - jvaas-jackson
 - jvaas-json
 - jvaas-provider

И jvaas-gson, и jvaas-jackson зависят от jvaas-json и jvaas-provider.jvaas-json зависит только от jvaas-provider.Если какое-то внешнее приложение хочет включить возможности JSON, оно должно включать только jvaas-gson или jvaas-jackson, который использует интерфейс в jvaas-json (как я уже сказал, это всего лишь эксперимент с ним, фактический вариант использования будетотключить почтовых провайдеров, платежных систем и т. д., которым нужно только изменить строку в скрипте сборки Gradle)

В jvaas-provider у меня есть settings.gradle.kts

rootProject.name = "jvaas-provider"

и build.gradle.kts

import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion

group = "io.jvaas"
version = "1.3.0"

plugins {
    `maven-publish`
    kotlin("jvm") version("1.3.10")
    id("org.jetbrains.dokka") version "0.9.16"
}

repositories {
    jcenter()
}

dependencies {
    implementation(kotlin("stdlib", getKotlinPluginVersion()))
    testImplementation("org.junit.jupiter:junit-jupiter-api:5.3.1")
}

publishing {
    repositories {
        mavenLocal()
    }
}

В jvaas-json я пытаюсь получить доступ к одному из классов в jvaas-provider, поэтому я добавил его к settings.gradle.kts

rootProject.name = "jvaas-json"

include("jvaas-provider")

иbuild.gradle.kts

import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion

group = "io.jvaas"
version = "1.3.0"

plugins {
    `maven-publish`
    kotlin("jvm") version("1.3.10")
    id("org.jetbrains.dokka") version "0.9.16"
}

repositories {
    jcenter()
}

dependencies {
    implementation(kotlin("stdlib", getKotlinPluginVersion()))
    implementation(group = "io.jvaas", name = "jvaas-provider", version = "$version")
    testImplementation("org.junit.jupiter:junit-jupiter-api:5.3.1")
}

Внутри jvaas-json, я пытаюсь получить доступ к одному из классов, которые я создал внутри jvaas-provider, но он не разрешается.

Без необходимости установки вручную jvaas-provider в локальном репозитории Maven (mvn install), возможно ли использовать его как зависимость внутри jvaas-json?Если так, что я должен изменить в своих скриптах сборки Gradle и файлах настроек?

1 Ответ

0 голосов
/ 19 ноября 2018

Пол из Kotlin Slack только что ответил на мой вопрос, как раз перед тем, как я смог нажать кнопку Post на своем вопросе StackOverflow, поэтому, опубликовав это в стиле QA, возможно, это поможет кому-то еще в будущем.

У Gradle естьчто-то под названием составные сборки , что позволяет вам включать другие проекты / библиотеки в ваш проект без предварительной установки их в локальное хранилище maven.

Чтобы приведенный выше пример работал с составными сборками,все, что мне нужно было сделать, это изменить что-то в файле settings.gradle.kts:

rootProject.name = "jvaas-json"

includeBuild("../jvaas-provider")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...