【问题标题】:How to add new sourceset with gradle kotlin-dsl如何使用 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 {

    }
}

谁能帮忙

【问题讨论】:

    标签: gradle kotlin gradle-kotlin-dsl


    【解决方案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")
            }
        }}
        

        【讨论】:

          猜你喜欢
          • 2019-04-29
          • 2019-02-04
          • 2019-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多