Ho un'attività che genera origini java e un set di giare da queste fonti (ad esempio, il progetto a
). Vorrei esportare questi vasi in progetti dipendenti (ad esempio, progetto b
). Quindi, ecco più o meno quello che ho in questo momento:Gradle - posso includere l'output dell'attività nelle dipendenze del progetto
//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')
}
funziona bene, tranne che l'aggiunta di generateJars.outputs.files
come dipendenza non dire Gradle che deve eseguire generateJars
compito quando non ci sono vasi ancora generato. Ho provato ad aggiungere l'attività stessa come dipendenza sperando che funzionasse come quando si aggiunge un'attività jar/zip a una configurazione artefatto (es. artifacts{ myJarTask }
), ma genera un errore che mi dice che non posso fare quella. Ovviamente posso iniettare l'attività generateJars
da qualche parte nel processo di compilazione prima che :b
inizi a valutare, ma è goffo e fragile, quindi vorrei evitarlo.
Mi sento come se dovessi aggiungere i vasi generati a artifacts{ ... }
del progetto, ma non sono sicuro di come renderli visibili ai progetti dipendenti. C'è un modo migliore per raggiungere questo obiettivo?
I progetti dipendenti (progetto b
) dovranno eseguire la configurazione del percorso classe IntelliJ IDEA del modulo in modo che punti ai getti generati dal progetto a
. Qualcosa di un po 'come questa (pseudo-codice):
//b.gradle
idea{
module{
scopes.COMPILE.plus += project(path: ':a', configuration: 'generatedJars').files
}
}
Finora ho provato la semplice aggiunta di un dependecy progetto su :a
s' generatedJars
in :b
, ma plug Idea aggiunge semplicemente modulo :a
come modulo-dipendenza e presuppone che esporta i suoi jar generati (che è probabilmente un presupposto corretto), pertanto non aggiunge i jar generati al classpath di :b
.
Qualsiasi aiuto sarebbe molto apprezzato!
Grazie. Aggiungendo l'attività a 'artefacts' woks piacevolmente all'interno del modulo, ma non vedo come posso fare riferimento a quei vasi dal progetto' b' (senza pubblicarli). Sì, è possibile generare solo sorgenti ed esportarle come sorgente del modulo. Questo dovrebbe funzionare, ma crea un lavoro extra per IDEA, quindi speravo che potesse essere aggirato in qualche modo. Per fare in modo che l'idea di 'ideaModule -> generateJars' funzioni bene, devo anche aggiungere' b: ideaModule -> a: ideaModule', e ho circa 3 moduli che hanno tutti bisogno di farlo. Speravo di poterlo configurare in qualche modo per la risoluzione automatica. – rodion
ad 1. 'project (percorso: 'a', configurazione: 'generatedJars')' –
ad 2. Il "lavoro extra" è importante? (È possibile utilizzare lo stesso argomento per il codice non generato.) In ogni caso, è consigliabile compilare i file con Gradle anziché con un'attività JavaExec. –