gpt4 book ai didi

kotlin - 包含自定义 sourceSet 的依赖项

转载 作者:行者123 更新时间:2023-12-02 13:17:32 26 4
gpt4 key购买 nike

我有一个 build.gradle.kts对于一个小型的纯 kotlin 项目(我知道我使用的是稍微非标准的源路径):

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

repositories { mavenCentral() }

dependencies {
implementation(kotlin("stdlib-jdk8"))
testImplementation("org.jetbrains.kotlin:kotlin-test")
testImplementation("org.jetbrains.kotlin:kotlin-test-junit")
}

sourceSets["main"].java.srcDir("src")
sourceSets["test"].java.srcDirs("test")
sourceSets {
create("demo")?.let {
it.java.srcDir("demo")
// Also tried: it.java.srcDirs("src", "demo")
it.compileClasspath += main.get().output
it.runtimeClasspath += main.get().output
}
}

tasks {
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
}

listOf("InteractiveClient", "LockingBufferDemo").forEach {
tasks.register<Jar>(it) {
manifest { attributes["Main-Class"] = "${it}Kt" }
from(sourceSets.main.get().output)
from(sourceSets["demo"].output) {
include("**/${it}Kt.class")
}
dependsOn(configurations.runtimeClasspath)
from({
configurations.runtimeClasspath.get().filter {
it.name.endsWith("jar") }.map { zipTree(it) }
})
}

}
当我尝试运行其中一个基于“演示”源集的 jar 任务(“InteractiveClient”和“LockingBufferDemo”)1时,我得到一长串“无法访问内置...”错误,表明 kotlin stdlib 不是正确发挥。
实际失败的任务是 compileDemoKotlin ,所以我尝试模拟添加到 tasks堵塞:
withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
this.kotlinOptions.jvmTarget = "1.8"
}
这没什么区别。
令我感到奇怪的是,演示内容最初在 test 中。 sourceSet,并将上述内容改回原样(通过删除定义,将 jar 任务中的 from(sourceSets["demo"]... 更改为 from(sourceSets.test...,并移动源文件)使问题消失。有用。
我不希望在自动化测试中使用这些东西。我想我可以把它们放在 main 的分支中或 test设置然后使用 from() { exclude(... build jar 的模式,
但这似乎很尴尬和不必要。
如何获取自定义源集以针对默认项目依赖项进行编译?
  • this other recent question of mine关于from(... include(在 jar 任务中。
  • 最佳答案

    在我看来,您缺少使演示源集使用与主集相同的依赖项的配置。像这样的东西:

    configurations["demoImplementation"].extendsFrom(configurations.implementation.get())
    configurations["demoRuntimeOnly"].extendsFrom(configurations.runtimeOnly.get())
    用户指南中有一个例子 here这似乎与您的用例非常相似。
    另外,来自 issue你在 Gradle 存储库中创建的,你提到它失败了:

    Unresolved reference: printlin


    我很确定这是 println 的拼写错误.

    关于kotlin - 包含自定义 sourceSet 的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62474238/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com