create - settings gradle module
El multiproyecto Gradle genera el error "No se pudo encontrar la propiedad ''sourceSets'' en el proyecto" (1)
La línea en cuestión es problemática porque asume que el proyecto :Libraries/MovedLibrary
se evalúa (no se ejecuta) antes del proyecto actual, que puede no ser el caso. Y si no lo es, los conjuntos de origen del otro proyecto no se habrán configurado todavía. (Ni siquiera habrá una propiedad sourceSets
porque el complemento java-base
aún no se ha aplicado).
En general, es mejor no acercarse a los modelos de proyectos de otros proyectos, especialmente si no son hijos del proyecto actual. En el caso del proyecto A que utiliza el código de prueba del proyecto B, la solución recomendada es que el proyecto B exponga un recipiente de prueba (a través de un bloque de artifacts {}
) que luego es consumido por el proyecto A.
Si desea mantener las cosas como están, puede solucionar el problema utilizando gradle.projectsEvaluated {}
o project.evaluationDependsOn()
. Consulte la Referencia del lenguaje de compilación de Gradle para obtener más información.
Tenía bastante buena configuración de gradle, que construyó todo muy bien. Pero uno de los proyectos de mi compilación de múltiples proyectos se derivó del resto de ellos, que con mucho gusto lo movería a otro repositorio de git y configuraría los submódulos para manejarlo.
Primero, moví Project y sus recursos a las subcarpetas Libraries/MovedProject
. Después de alterar algunas líneas en configuraciones de gradle funcionó bien. Pero luego decidí escribir un nuevo build.gradle solo para este proyecto y mover todas las configuraciones allí desde el principal.
Y aquí es donde todo dejó de funcionar. Cuando trato de llamar a cualquier tarea, siempre termina con Could not find property ''sourceSets'' on project '':Libraries/MovedProject''
. La línea que es responsable de ello es:
dependencies {
...
if (noEclipseTask) {
testCompile project('':Libraries/MovedLibrary'').sourceSets.test.output
}
}
que utilizo para ejecutar pruebas en las que utilizo clases de otros proyectos. Si elimino esa línea, la compilación solo falla cuando alcanza la tarea compileTestJava de proyectos que hacen uso de MovedProject. Si gradle :Libraries/MovedLibrary:properties
esa línea y llamo a gradle :Libraries/MovedLibrary:properties
que puedo ver:
...
sourceCompatibility: 1.7
sourceSets: [source set main, source set test]
standardOutputCapture: org.gradle.logging.internal.DefaultLoggingManager@1e263938
...
while gradle :Libraries/MovedLibrary:build
compilaciones correctamente.
Actualmente tengo todo configurado como sigue:
directorios:
- / SomeMainProject1
- / SomeMainProject2
- / SomeMainProject3
- / Bibliotecas
- / MovedProject
- construir.gradle
- dependencias.gradle
- proyecto.gradle
- tareas.gradle
- / MovedProject
- /Constructor
- dependencias.gradle
- proyecto.gradle
- tareas.gradle
- construir.gradle
- settings.gradle
settings.gradle
include Libraries/MovedProject, SomeMainProject1, SomeMainProject2, SomeMainProject3
sourceSets para MovedProject se definen en
Libraries/MovedProject/project.gradle
:sourceSets { main { java { srcDir ''src'' srcDir ''resources'' } resources { srcDir ''resources'' } } test { java { srcDir ''test/unit'' } } }
las dependencias que utilizan sourceSets.test.output se almacenan en
Builder/dependancies.gradle
y se establecen para cada proyecto que necesita MovedProject para ejecutar pruebas:project('':SomeMainProject1'') { dependencies { ... if (noEclipseTask) { testCompile project('':Libraries/net.jsdpu'').sourceSets.test.output } } }
¿Cuál sería la forma más fácil de deshacerse de ese error y hacer proyectos de compilación de gradle con la estructura de directorios actual? Me gustaría entender por qué Gradle no puede ver esa propiedad.