2013-06-11 17 views
7

Ho uno script gradle build con una manciata di set di origini che hanno tutte varie dipendenze definite (alcune comuni, altre no), e sto provando a usare il plugin Eclipse per lasciare che Gradle generi i file .project e .classpath per Eclipse, ma non riesco a capire come ottenere tutte le voci delle dipendenze in .classpath; per qualche motivo, alcune delle dipendenze esterne vengono effettivamente aggiunte a .classpath e, di conseguenza, la build di Eclipse fallisce con 1400 errori (la costruzione con gradle funziona correttamente).Gradle con Eclipse - incompleto .classpath quando più sourcesets

ho definito i miei set di origine in questo modo:

sourceSets { 
    setOne 
    setTwo { 
     compileClasspath += setOne.runtimeClasspath 
    } 
    test { 
     compileClasspath += setOne.runtimeClasspath 
     compileClasspath += setTwo.runtimeClasspath 
    } 
} 

dependencies { 
    setOne 'external:dependency:1.0' 
    setTwo 'other:dependency:2.0' 
} 

Dal momento che non sto usando il main fonte-set, ho pensato che questo potrebbe avere qualcosa a che fare con esso, così ho aggiunto

sourceSets.each { ss -> 
    sourceSets.main { 
     compileClasspath += ss.runtimeClasspath 
    } 
} 

ma questo non ha aiutato.

Non sono stato in grado di capire le proprietà comuni delle librerie incluse o di quelle che non lo sono, ma non riesco a trovare nulla di cui sono sicuro (anche se ovviamente è necessario essere qualcosa). Ho la sensazione che tutte le librerie incluse dipendano dal set di origine test, direttamente o indirettamente, ma non sono stato in grado di verificarlo più che notare che tutte le dipendenze di test ci sono.

Come faccio a garantire che le dipendenze di tutte le origini siano inserite in .classpath?

risposta

2

Questo è stato risolto in un modo che era strettamente legato ad una similar question ho chiesto ieri:

// Create a list of all the configuration names for my source sets 
def ssConfigNames = sourceSets.findAll { ss -> ss.name != "main" }.collect { ss -> "${ss.name}Compile".toString() } 
// Find configurations matching those of my source sets 
configurations.findAll { conf -> "${conf.name}".toString() in ssConfigNames }.each { conf -> 
    // Add matching configurations to Eclipse classpath 
    eclipse.classpath { 
     plusConfigurations += conf 
    } 
} 

Aggiornamento:

ho anche asked the same question in the Gradle forums, e ottenuto una soluzione ancora migliore:

eclipseClasspath.plusConfigurations = configurations.findAll { it.name.endsWith("Runtime") } 

Non è così preciso, in quanto aggiunge altre cose oltre alle cose del mio modo urce set, ma garantisce che funzionerà. Ed è molto più facile per gli occhi =)

2

Sono d'accordo con Tomas Lycken, è meglio usare la seconda opzione, ma potrebbe essere necessario piccola correzione:

eclipse.classpath.plusConfigurations = {configurations.findAll it.name .endsWith ("Runtime")}

+0

Bonus: Questo è l'unico metodo che funziona con Gradle 2.0+ - grazie per la condivisione! – Svante

1

Questo è ciò che ha funzionato per me con Gradle 2.2.1: informazioni

eclipse.classpath.plusConfigurations = [configurations.compile] 
Problemi correlati