如何构建Gradle构建以允许构建相互依赖的库

时间:2018-11-19 11:11:50

标签: gradle

我建立了一个小小的测试项目,看看Gradle是否可以解决我们目前在Maven中遇到的问题。我们有200个小图书馆,所有的小图书馆都是Maven项目,每当您进行完结帐时,都必须分别mvn install分别

为了模拟这种情况,我创建了4个模块:

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

jvaas-gsonjvaas-jackson都取决于jvaas-jsonjvaas-providerjvaas-json仅取决于jvaas-provider。 如果某些外部应用程序要包含JSON功能,则只需要包含jvaas-gsonjvaas-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内部创建的类之一,但没有解决。

无需在本地Maven存储库(jvaas-provider)中手动安装mvn install,是否可以将其用作jvaas-json内部的依赖项?如果是这样,我应该在Gradle构建脚本和设置文件中进行哪些更改?

1 个答案:

答案 0 :(得分:0)

Kotlin Slack上的Paul刚刚在我可以在我的StackOverflow问题上点击Post之前回答了我的问题,因此以QA风格发布此消息,也许将来会对其他人有所帮助。

Gradle有一个名为composite builds的东西,它使您可以在项目中包含其他项目/库,而不必先将它们安装到本地Maven存储库中。

对于上面的示例,要使用复合构建,我要做的就是更改settings.gradle.kts文件中的内容:

rootProject.name = "jvaas-json"

includeBuild("../jvaas-provider")