Как добавить новый источник с помощью gradle kotlin-dsl

Я хочу добавить источник 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 {

    }
}

Может ли кто-нибудь помочь здесь

10 ответов

Решение

Вы должны попробовать следующее:

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

Надеюсь, это то, что вам нужно!

Ответ @s1m0nw1 правильный, чтобы добавить новый источник. Но чтобы просто добавить новую исходную папку в существующий исходный набор, это можно использовать:

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

Работал у меня на 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 блок.

Работал для меня на Gradle 4.10.2:

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

котлин-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")
        }
    }

Я хотел добавить исходный набор с именем "интеграция тестов" и исходный каталог src/test-integration/kotlin, Я смог сделать это, объединив два ранее существовавших ответа:

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

Вот что у меня было раньше:

      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 7.5:

      sourceSets {
    main {
        java.sourceSets {
            create("gen"){
                java.srcDir("src/gen/java")
            }
        }
    }
}

Если вам интересно, как это сделать вJetpack Compose + Jvmприложение:

      plugins {
    kotlin("jvm")
    id("org.jetbrains.compose") version "1.4.1"
}

kotlin {
    sourceSets {
        main {
            kotlin.srcDir("src/jvmMain/kotlin")
            resources.srcDir("src/jvmMain/res")
        }
    }

    dependencies {
        implementation(compose.desktop.currentOs)
    }
}

Ставка на способ использования плагина jvm-test-suite, например:

      
plugins {
    // ..
    `jvm-test-suite`
}

testing {
    suites {
        register("konsistTest", JvmTestSuite::class) {
            dependencies {
                // Add 'main' source set dependency (optional)
                implementation(project())

                // Add Source set specific dependencies
                implementation("com.lemonappdev:konsist:0.11.0")
            }
        }
    }
}

The konsistTest— имя нового исходного набора. Теперь просто создайте каталог с таким же именем в IDE:

Другие вопросы по тегам