Tengo una tarea que genera fuentes Java y un conjunto de jarras de estas fuentes (por ejemplo, proyecto a
). Me gustaría exportar estas jarras a proyectos dependientes (por ejemplo, proyecto b
). Así que aquí es más o menos lo que tengo en este momento:Gradle: ¿puedo incluir la salida de la tarea en dependencias del proyecto?
//a.gradle
configurations{
generatedJars
}
task generateJars(type: JavaExec) {
//generate jars ...
outputs.files += //append generated jars here
}
dependencies{
generatedJars generateJars.outputs.files
}
//b.gradle
dependencies{
project(path: ':a', configuration: 'generatedJars')
}
Funciona bien, excepto que la adición de generateJars.outputs.files
como una dependencia no le dice a Gradle que tiene que ejecutar generateJars
tarea cuando no hay frascos generados todavía. He intentado agregar la tarea como una dependencia con la esperanza de que funcione de la misma manera que cuando se agrega una tarea jar/zip a una configuración de artefacto (por ejemplo, artifacts{ myJarTask }
), pero arroja un error diciéndome que no puedo hacer ese. Por supuesto, puedo inyectar la tarea generateJars
en algún lugar del proceso de compilación antes de que :b
empiece a evaluar, pero eso es torpe y frágil, por lo que me gustaría evitarlo.
Siento que debería agregar los archivos jar generados a artifacts{ ... }
del proyecto, pero no estoy seguro de cómo hacerlos visibles para los proyectos dependientes. ¿Hay una mejor manera de lograr esto?
Los proyectos dependientes (proyecto b
) necesitarán configurar el classpath del módulo IDEA de IntelliJ para apuntar a los archivos jar generados del proyecto a
. Algo más bien como este (pseudo-código):
//b.gradle
idea{
module{
scopes.COMPILE.plus += project(path: ':a', configuration: 'generatedJars').files
}
}
Hasta ahora he intentado simplemente añadiendo un dependecy proyecto sobre :a
's generatedJars
en :b
, pero plug-in Idea simplemente añade módulo :a
como un módulo de dependencia y asume que exporta sus jar generados (que probablemente sea una suposición correcta), por lo tanto, no agrega los jar generados al classpath de :b
.
¡Cualquier ayuda sería muy apreciada!
Gracias. Agregar la tarea a 'artifacts' funciona bien dentro del módulo, pero no veo cómo puedo hacer referencia a esos archivos jar del proyecto' b' (sin publicarlos). Sí, es posible generar solo fuentes y exportarlas como fuente del módulo. Esto debería funcionar, pero crea trabajo adicional para IDEA, así que esperaba que se pudiera eludir de alguna manera. Para que el enganche 'ideaModule -> generateJars' funcione bien, también necesito agregar' b: ideaModule -> a: ideaModule', y tengo alrededor de 3 módulos que necesitan hacer esto. Esperaba poder configurarlo para una resolución automática de alguna manera. – rodion
anuncio 1. 'proyecto (ruta: 'a', configuración: 'generatedJars')' –
anuncio 2. ¿Importa el "trabajo extra"? (Podría usar el mismo argumento para el código no generado.) En cualquier caso, probablemente debería compilar los archivos con Gradle en lugar de una tarea JavaExec. –