3 votes

Comment créer un SourceSet Kotlin supplémentaire en utilisant Gradle avec Kotlin DSL

Je veux créer un ensemble de sources de bibliothèque de test, src/tlib/kotlin qui "se situe entre" le main et le test. J'ai cela, mais je ne suis pas sûr pourquoi je devrais utiliser le répertoire source java pour kotlin, et j'ai besoin de le faire dépendre de mes sources principales

sourceSets {
   create("tlib").java.srcDir("src/tlib/kotlin")
}

mise à jour

Calebs-MBP:phg-entity calebcushing$ ./gradlew build
e: Les super-types des classes suivantes ne peuvent pas être résolus. Assurez-vous d'avoir les dépendances requises dans le classpath :
    classe phg.entity.AbstractEntityBase, super-types non résolus : org.springframework.data.domain.Persistable
> Tâche :compileTlibKotlin échouée

fermer

sourceSets {
    val main by getting
    val tlib by creating {
        java {
            srcDir("src/tlib/kotlin")
            compileClasspath += main.output
            runtimeClasspath += main.output
        }
    }
    val test by getting {
        java {
            compileClasspath += tlib.output
            runtimeClasspath += tlib.output
        }
    }
}

configurations {
    val compile by getting
    val runtime by getting
    val tlibCompile by getting {
        extendsFrom(compile)
    }
    val tlibRuntime by getting {
        extendsFrom(runtime)
    }
    val testCompile by getting {
        extendsFrom(tlibCompile)
    }
    val testRuntime by getting {
        extendsFrom(tlibRuntime)
    }
}

dependencies {
    implementation("${project.group}:constant:[0.1,1.0)")
    api("javax.validation:validation-api")
    api("javax.persistence:javax.persistence-api")
    api("org.springframework.data:spring-data-commons") // contient la dépendance manquante

6voto

Louis Jacomet Points 650

Un certain nombre de choses sont correctement prises en charge par les plugins, donc l'ajout concerne vraiment la configuration du chemin de classe sourceSet et le câblage des configurations.

Voici une courte réponse montrant la configuration du chemin de classe et une extension de configuration :

sourceSets {
    val tlib by creating {
        // Le plugin Kotlin reconnaîtra par défaut les sources Kotlin dans src/tlib/kotlin
        compileClasspath += sourceSets["main"].output
        runtimeClasspath += sourceSets["main"].output
    }
}

configurations {
    val tlibImplementation by getting {
        extendsFrom(configurations["implementation"])
    }
}

3voto

Eugene Petrenko Points 995

Il y a une question similaire pour Groovy
Comment ajouter un nouveau sourceset à Gradle?

sourceSets {
  val main by getting
  val test by getting
  val tlib by creating {
    java {
      srcDir("src/tlib/kotlin")
      compileClasspath += main.output + test.output
      runtimeClasspath += main.output + test.output
    }
  }
}

configurations {
  val testCompile by getting
  val testRuntime by getting
  val tlibCompile by getting {
    extendsFrom(testCompile)
  }
  val tlibRuntime by getting {
    extendsFrom(testRuntime)
  }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X