2013-08-12 10 views
6

Ho una configurazione multiprogetto con 3 progetti diversi.Compilare un progetto con diversa compatibilità con la sorgente java

2 dei progetti dipendono dal 3 ° progetto, che ho chiamato "core". A seconda del progetto, 'core' deve compilare un jar, con compatibilità di origine per 1.4 e 1.6 rispettivamente, nelle uscite core-1.4.jar e core-1.6.jar.

E 'possibile farlo con un singolo build.gradle, o quale sarebbe il modo migliore per farlo? Come posso specificare quale jar in particolare nelle mie dipendenze per ciascuno dei 2 progetti?

+0

Sì, anche le compatibilità obiettivo. Ho provato: sourceCompatibility = 1.4 targetCompatibility = 1.4 nell'attività, ma questo non funziona. Uno degli obiettivi è Java ME, l'altro è Android. –

+0

Che cosa esattamente non funziona? –

risposta

12

La domanda riguarda fondamentalmente come produrre e consumare due varianti di un artefatto basate sullo stesso codice Java. A patto che tu abbia davvero bisogno di produrre due jar che differiscono solo nella loro compatibilità di destinazione (cosa che vorrei prima fare una domanda), un modo per ottenere questo è usare il set di sorgenti main del plugin Java (e le attività che vengono con esso) per produrre la prima variazione e una nuova sorgente impostata per produrre la seconda variazione. Inoltre, la seconda variante deve essere pubblicata tramite la propria configurazione in modo che i progetti dipendenti possano farvi riferimento. Questo potrebbe apparire come segue:

core/build.gradle:

apply plugin: "java" 

sourceCompatibility = 1.4 

sourceSets { 
    main1_4 { 
     def main = sourceSets.main 
     java.srcDirs = main.java.srcDirs 
     resources.srcDirs = main.resources.srcDirs 
     compileClasspath = main.compileClasspath 
     runtimeClasspath = main.runtimeClasspath 
    } 
} 

compileJava { 
    targetCompatibility = 1.6 
} 

compileMain1_4Java { 
    targetCompatibility = 1.4  
} 

jar { 
    archiveName = "core-1.6.jar" 
} 

main1_4Jar { 
    archiveName = "core-1.4.jar" 
} 

configurations { 
    archives1_4 
} 

artifacts { 
    archives1_4 main1_4Jar 
} 

Nei progetti a seconda:

dependencies { 
    compile project(":core") // depend on 1.6 version 
    compile project(path: ":core", configuration: "archives1_4") // depend on 1.4 version 
} 

Tutto questo può (ma non deve) essere fatto in lo stesso script di compilazione. Vedi il capitolo "build multi-progetto" nello Gradle User Guide per i dettagli.

+0

Grazie. Il mio problema prima era che avevo impostato compileClasspath = , che rimuoveva il jar del progetto principale dal percorso. Passare ad esso + = risolto il problema. –

+0

Mi sono appena reso conto che avevo bisogno di rivedere completamente la mia risposta. Dovrebbe essere ora molto più vicino alla verità. –

Problemi correlati