2013-11-22 24 views
11

sto sviluppando un progetto multi-modulo con Gradle/IntelliJ-idea, e qui è la struttura della mia casa progetto:Gradle: la dipendenza dalle risorse comuni per Java più progetti

project/ 
    sub-project-1 
    /main/resources 
    sub-project-2 
    /main/resources 
    data 
    /main/resources 
    /test/resources 

Come potete vedere ho avere più sotto-progetti (tutti java), come posso farli dipendere da alcune risorse comuni (il progetto "dati", che non contiene codice ma solo risorse), così come le loro risorse separate?

Inoltre, è meglio che l'idea di intellij sia in grado di rilevare queste dipendenze automaticamente con JetGradle (JetGradle esegue semplicemente la raccolta delle dipendenze predefinite del progetto java gradle all'interno di ciascun sottoprogetto).

Grazie mille!

risposta

5

Una soluzione è quella di applicare il plugin Java anche al progetto data, e quindi l'uso regolare dipendenze del progetto (ad esempio dependencies { runtime project(":data") }). Tuttavia, ciò richiederebbe un po 'di sforzo per impedire la spedizione delle risorse del test.

Un'altra soluzione non è rendere data un progetto Gradle ma includere letteralmente le sue directory di risorse negli altri due progetti (sourceSets.main.resources.srcDir "../date/main/resources"; sourceSets.test.resources.srcDir "../data/test/resources").

+0

La seconda soluzione suona meglio. Grazie! –

4

Ok, l'ho capito. In realtà è piuttosto semplice. Trattare la cartella "data" come un altro progetto e aggiungere dichiarazioni di dipendenza ai sottoprogetti farà il trucco. Per esempio:

dependencies { 
    compile project (':data') 
    testCompile project (':data') 
} 
+2

Ciao Eric, voglio fare più o meno la stessa cosa. hai effettivamente creato il progetto: data come progetto gradle? se sì, potresti condividere il tuo build.gradle per favore? – Dave00Galloway

2

L'approccio che ho preso è stato quello di utilizzare riferimento del progetto

sourceSets { 
    main { 
     resources { 
      srcDirs += [ 
       project(':data').sourceSets.main.resources 
      ] 
     } 
    } 
} 
+0

amico sei un dannato salvatore di vita. Stavo cercando ore per ottenere un file da caricare su due moduli senza duplicarlo ma non importa dove lo metto, come lo ho chiamato, o come l'ho caricato dal classpath ogni volta che l'esecuzione passa da un modulo a un altro modulo gradle che ho sempre ottenuto 'FileNotFoundException'. Questo risolve il problema! – anon58192932

+1

contento che abbia aiutato qualcuno :) –

+0

Ottengo uno stack overflow quando provo questo. Rimbalza tra a org.gradle.api.internal.file.DefaultSourceDirectorySet.getSrcDirTrees (DefaultSourceDirectorySet.java:128) a org.gradle.api.internal.file.DefaultSourceDirectorySet.doGetSrcDirTrees (DefaultSourceDirectorySet.java:141) –

Problemi correlati