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

gue*_*ter 14 gradle kotlin gradle-kotlin-dsl

我想添加一个sourceset 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"
    }
}
Run Code Online (Sandbox Code Playgroud)

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

java {
    sourceSets {

    }
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮到这里

gue*_*ter 12

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

java.sourceSets["main"].java {
    srcDir("src/gen/java")
}
Run Code Online (Sandbox Code Playgroud)

  • 这对我也有用。你是如何找到这个答案的?它在哪里记录? (2认同)
  • 通过在 @s1m0nw1 的回答后进行尝试 (2认同)
  • 我在我的 kotlin 项目中使用子模块作为 kotlin 库。省略第一部分“java”对我有用。即 `sourceSets["main"].java { srcDir("src/main/kotlin") }` (2认同)

And*_*cev 12

在 Gradle 4.10.2 上为我工作:

sourceSets.create("integrationTest") {
    java.srcDir("src/integrationTest/java")
    java.srcDir("build/generated/source/apt/integrationTest")
    resources.srcDir("src/integrationTest/resources")
}
Run Code Online (Sandbox Code Playgroud)


s1m*_*nw1 11

您应该尝试以下方法:

java.sourceSets.create("src/gen/java")
Run Code Online (Sandbox Code Playgroud)

希望这是你需要的!


abh*_*era 11

kotlin-dsl

sourceSets {
        this.getByName("androidTest"){
            //Adds the given source directory to this set.
            this.java.srcDir("src/mock/java")
        }
        this.getByName("test"){
            this.java.srcDir("src/mock/java")
        }
    }
Run Code Online (Sandbox Code Playgroud)


Cor*_*han 6

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

java.sourceSets.create("test-integration").java {
    srcDir("src/test-integration/kotlin")
}
Run Code Online (Sandbox Code Playgroud)


小智 6

在 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")
}
Run Code Online (Sandbox Code Playgroud)

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