multi create gradle multi-project

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:

  1. directorios:

    • / SomeMainProject1
    • / SomeMainProject2
    • / SomeMainProject3
    • / Bibliotecas
      • / MovedProject
        • construir.gradle
        • dependencias.gradle
        • proyecto.gradle
        • tareas.gradle
    • /Constructor
      • dependencias.gradle
      • proyecto.gradle
      • tareas.gradle
    • construir.gradle
    • settings.gradle
  2. settings.gradle

    include Libraries/MovedProject, SomeMainProject1, SomeMainProject2, SomeMainProject3

  3. 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'' } } }

  4. 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.