¿Cómo puede el plugin de Gradle acceder a información sobre las construcciones incluidas?
Sé que puedes acceder a diferentes módulos (incluidos usando include
) en un proyecto a través de org.gradle.api.Project#getSubprojects()
, y sé que puedes obtener el nombre y los directorios de las compilaciones separadas que se han incluido (usando includeBuild
) a través de org.gradle.api.invocation.Gradle#getIncludedBuilds()
.
Pero, ¿cómo puede mi complemento obtener información como las ubicaciones de los archivos fuente y los archivos de clase de los proyectos incluidos utilizando includeBuild
?
Mi objetivo aquí es determinar qué archivos han cambiado en la rama actual de git (lo cual puedo hacer), y luego recopilar sus archivos de clase correspondientes en un archivo jar que se utiliza para nuestro mecanismo de parcheo que inserta los archivos jar de parche al principio del classpath en lugar de volver a implementar toda la aplicación.
davy.ai
Para obtener información como las ubicaciones de los archivos fuente de Java y los archivos de clase para los proyectos incluidos mediante el uso de
includeBuild
, puedes utilizar la instanciaProject
para el build incluido y luego llamar al métodogetSourceSets()
para obtener los conjuntos de fuentes de Java para cada proyecto. Esto te dará acceso a las ubicaciones de los archivos fuente de Java. De manera similar, puedes utilizar el métodogetOutputs()
en cada proyecto para obtener las ubicaciones de los archivos de clase.Aquí tienes un ejemplo de cómo puedes lograr esto en tu plugin:
En este ejemplo, iteramos sobre cada uno de los builds incluidos y luego sobre todos los proyectos en esos builds. Para cada proyecto, obtenemos los conjuntos de fuentes y las salidas e imprimimos sus ubicaciones en la consola.
Luego, puedes utilizar esta información para recopilar los archivos de clase correspondientes en un archivo jar según tus requisitos para tu mecanismo de parches.