如何使用 gradle kotlin-dsl 添加新的源集

Posted

技术标签:

【中文标题】如何使用 gradle kotlin-dsl 添加新的源集【英文标题】:How to add new sourceset with gradle kotlin-dsl 【发布时间】:2018-03-07 06:51:15 【问题描述】:

我想添加一个源集src/gen/java。使用 groovy 这很容易,并且已经在 https://discuss.gradle.org/t/how-to-use-gradle-with-generated-sources/9401/5

中进行了描述
sourceSets 
   gen 
        java.srcDir "src/gen/java"
    

但我坚持使用 kotlin-dsl 添加一个新的。我所拥有的是:

java 
    sourceSets 

    

谁能帮忙

【问题讨论】:

【参考方案1】:

@s1m0nw1 的答案是正确的添加一个新的源集。 但是要在现有源集中添加一个新的源文件夹,可以使用:

java.sourceSets["main"].java 
    srcDir("src/gen/java")

【讨论】:

这对我也有用。你是怎么找到这个答案的?它记录在哪里? 在@s1m0nw1 的回答之后玩耍 eclipse kotlin 编辑器和插件不完整,有问题。它们不提供代码完成提示。我已经停止使用 eclipse,现在改用 IntelliJ Idea,它确实让我看到了 Gradle-Kotlin-DSL 实现 API 的内部结构,因此我可以发现可供我使用的 API 调用。缺乏适当的文档一直令人沮丧,但现在希望有了 IntelliJ 的代码完成提示;这不会是一个很大的限制。 我在我的 kotlin 项目中使用子模块作为 kotlin 库。离开第一部分 java 为我工作。即sourceSets["main"].java srcDir("src/main/kotlin") 【参考方案2】:

您应该尝试以下方法:

java.sourceSets.create("src/gen/java")

希望这是你需要的!

【讨论】:

谢谢。似乎不起作用。它似乎是有效的,但未编译源。 嗯,在解决了我的问题之后,我不需要新的源集(添加新源集的答案是正确的),但是要有一个新的源文件夹在现有的main 源集内 在 Gradle 6 上,不能再使用这个了,java.sourceSets 不再存在【参考方案3】:

在 Gradle 4.10.2 上为我工作:

sourceSets.create("integrationTest") 
    java.srcDir("src/integrationTest/java")
    java.srcDir("build/generated/source/apt/integrationTest")
    resources.srcDir("src/integrationTest/resources")

【讨论】:

您知道为什么我在拨打create("libs") 时收到错误The SourceSet 'libs' is not recognized by the android Gradle Plugin. 吗?【参考方案4】:

在 Gradle 4.10.2 上为我工作:

sourceSets.getByName("main") 
    java.srcDir("src/main/java")
    java.srcDir("src/main/kotlin")

sourceSets.getByName("test") 
    java.srcDir("src/test/java")
    java.srcDir("src/test/kotlin")

上面的代码也可以用在subprojects块中。

【讨论】:

【参考方案5】:

我想添加一个名为“test-integration”的源集和源目录src/test-integration/kotlin。我能够通过结合两个预先存在的答案来实现这一点:

java.sourceSets.create("test-integration").java 
    srcDir("src/test-integration/kotlin")

【讨论】:

【参考方案6】:

这是我之前的:

main.kotlin.srcDirs = main.java.srcDirs = ['src']
test.kotlin.srcDirs = test.java.srcDirs = ['test']
main.resources.srcDirs = ['resources']
test.resources.srcDirs = ['testresources']

以上现在转换为:

sourceSets 
main 
    java 
        srcDirs("src")
    
    resources 
        srcDirs("resources")
    

test 
    java 
        srcDirs("test")
    
    resources 
        srcDirs("testresources")
    

【讨论】:

以上是关于如何使用 gradle kotlin-dsl 添加新的源集的主要内容,如果未能解决你的问题,请参考以下文章

如何添加jcenter仓库 gradle依赖

sts如何添加gradle子工程

如何使用 kotlinscript DSL (build.gradle.kts) 通过 url 添加 maven 存储库

如何使用 Gradle 将 jar 文件添加到 libgdx 项目

如何使用单个build.gradle配置向kotlin多平台项目添加依赖项

如何在构建命令中在Gradle上添加运行时库