java - agregar - ¿Cómo agrego un nuevo conjunto de orígenes a Gradle?
agregar componentes a un jpanel java (5)
Aquí es cómo lo logré sin usar configurations{ }
.
apply plugin: ''java''
sourceCompatibility = JavaVersion.VERSION_1_6
sourceSets {
integrationTest {
java {
srcDir ''src/integrationtest/java''
}
resources {
srcDir ''src/integrationtest/resources''
}
compileClasspath += sourceSets.main.runtimeClasspath
}
}
task integrationTest(type: Test) {
description = "Runs Integration Tests"
testClassesDir = sourceSets.integrationTest.output.classesDir
classpath += sourceSets.integrationTest.runtimeClasspath
}
Probado usando: Gradle 1.4 y Gradle 1.6
Quiero agregar pruebas de integración a mi compilación de Gradle (Versión 1.0). Deberían ejecutarse por separado de mis pruebas normales porque requieren que se implemente una aplicación web en localhost (prueban esa aplicación web). Las pruebas deberían poder usar clases definidas en mi fuente principal. ¿Cómo hago que esto suceda?
El complemento nebula-facet elimina la repetición:
apply plugin: ''nebula.facet''
facets {
integrationTest {
parentSourceSet = ''test''
}
}
Para pruebas de integración específicamente, incluso si esto se hace por usted , simplemente aplique:
apply plugin: ''nebula.integtest''
Los enlaces del portal del complemento Gradle para cada uno son:
Esto es lo que funciona para mí a partir de Gradle 4.0.
sourceSets {
integrationTest {
compileClasspath += sourceSets.test.compileClasspath
runtimeClasspath += sourceSets.test.runtimeClasspath
}
}
task integrationTest(type: Test) {
description = "Runs the integration tests."
group = ''verification''
testClassesDirs = sourceSets.integrationTest.output.classesDirs
classpath = sourceSets.integrationTest.runtimeClasspath
}
A partir de la versión 4.0, Gradle ahora usa directorios de clases separados para cada idioma en un conjunto fuente. Entonces, si su script de compilación usa sourceSets.integrationTest.output.classesDir
, verá la siguiente advertencia de desaprobación.
Gradle ahora usa directorios de salida separados para cada lenguaje JVM, pero esta compilación asume un único directorio para todas las clases desde un conjunto fuente. Este comportamiento ha quedado obsoleto y está programado para eliminarse en Gradle 5.0
Para deshacerse de esta advertencia, simplemente cambie a sourceSets.integrationTest.output.classesDirs
en sourceSets.integrationTest.output.classesDirs
lugar. Para obtener más información, consulte las notas de la versión de Gradle 4.0 .
Esto me llevó un tiempo descubrirlo y los recursos en línea no eran geniales. Así que quería documentar mi solución.
Este es un script simple de compilación gradle que tiene un conjunto de fuentes intTest además de los conjuntos fuente principales y de prueba:
apply plugin: "java"
sourceSets {
// Note that just declaring this sourceset creates two configurations.
intTest {
java {
compileClasspath += main.output
runtimeClasspath += main.output
}
}
}
configurations {
intTestCompile.extendsFrom testCompile
intTestRuntime.extendsFrom testRuntime
}
task intTest(type:Test){
description = "Run integration tests (located in src/intTest/...)."
testClassesDir = project.sourceSets.intTest.output.classesDir
classpath = project.sourceSets.intTest.runtimeClasspath
}
Para resumir ambas respuestas anteriores (obtener el mejor y mínimo viable de ambos mundos):
algunas palabras cálidas primero:
primero, necesitamos definir el conjunto de origen:
sourceSets { integrationTest }
A continuación, ampliamos SourceSet de la prueba, para lo cual utilizamos la prueba runtimeClasspath (que incluye todas las pruebas de la prueba AND test en sí) como classpath para el sourceSet derivado
sourceSets { integrationTest { compileClasspath += sourceSets.test.runtimeClasspath runtimeClasspath += sourceSets.test.runtimeClasspath // ***) } }
- *** nota) de alguna manera esta redeclaración / extensión para sourceSets.integrationTest.runtimeClasspath es necesaria, pero debe ser irrelevante ya que runtimeClasspath siempre expande
output + runtimeSourceSet
, no lo obtiene
- *** nota) de alguna manera esta redeclaración / extensión para sourceSets.integrationTest.runtimeClasspath es necesaria, pero debe ser irrelevante ya que runtimeClasspath siempre expande
definimos una tarea dedicada solo para ejecutar pruebas de integración
task integrationTest(type: Test) { }
Dile a la tarea de prueba qué clases de prueba y classPaths se deben usar en lugar de los valores predeterminados del conjunto de orígenes "de prueba"
task integrationTest(type: Test) { testClassesDir = sourceSets.integrationTest.output.classesDir classpath = sourceSets.integrationTest.runtimeClasspath }
(opcional) ejecución automática después de la prueba
integrationTest.dependsOn test
(opcional) ejecución automática con cheque
check.dependsOn integrationTest
(opcional) agregue java, resources a sourceSet para permitir la detección automática y crear estos "parciales" en su IDE. es decir, IntelliJ IDEA creará automáticamente directorios sourceSet java y recursos para cada conjunto si no existe
sourceSets { integrationTest { java resources } }
tl; dr
apply plugin: ''java''
// apply the runtimeClasspath from "test" sourceSet to the new one
// to include any needed assets: test, main, test-dependencies and main-dependencies
sourceSets {
integrationTest {
// not necessary but nice for IDEa''s
java
resources
compileClasspath += sourceSets.test.runtimeClasspath
// somehow this redeclaration is needed, but should be irrelevant
// since runtimeClasspath always expands compileClasspath
runtimeClasspath += sourceSets.test.runtimeClasspath
}
}
// define custom test task for running integration tests
task integrationTest(type: Test) {
testClassesDir = sourceSets.integrationTest.output.classesDir
classpath = sourceSets.integrationTest.runtimeClasspath
}
integrationTest.dependsOn test
refiriéndose a:
- gradle java capítulo 45.7.1. Propiedades del conjunto de orígenes
- gradle java capítulo 45.7.3. Algunos ejemplos de conjuntos de fuentes
desafortunadamente, el código de ejemplo en github.com/gradle/gradle/subprojects/docs/src/samples/java/customizedLayout/build.gradle o …/gradle/…/withIntegrationTests/build.gradle parece no manejar esto o tiene una diferente / más complejo / ¡para mí no hay una solución más clara de todos modos!