2015-01-12 10 views
5

Sto usando gradle e voglio creare un .jar con i file di origine quando si fa un publishToMavenLocal. Ho ottenuto che di lavorare facilmente:Jar con i file di origine e le dipendenze in POM

task jarWithSources(type: Jar) { 
    from sourceSets.main.output 
    if (gradle.startParameter.taskNames.any{it == "publishToMavenLocal"}) { 
     from sourceSets.main.allJava 
    } 
} 

publishing { 
    publications { 
     // publish the data_deposit jar as a standalone artifact 
     mavenJar(MavenPublication) { 
      artifact jarWithSources 
      artifactId "${jar.baseName}_jar" 
      version project.version 
     } 
    } 
    repositories { 
     maven { ... } 
    } 
} 

Tuttavia il pom.xml manca le dipendenze.

Se io uso questo:

publishing { 
    publications { 
     // publish the data_deposit jar as a standalone artifact 
     mavenJar(MavenPublication) { 
      // artifact jarWithSources // Stopped using this 
      from components.java   // Have added this 
      artifactId "${jar.baseName}_jar" 
      version project.version 
     } 
    } 
    repositories { 
     maven { ... } 
    } 
} 

Dove questo è solo che un cambio nella MavenPublication, poi ho ottenere il pieno pom.xml, ma nessuna fonte, naturalmente. Non riesco a trovare un modo per includere sia artifact jarWithSources e from components.java. L'errore è:

Invalid publication 'mavenJar': multiple artifacts with the identical extension and classifier ('jar', 'null'). 

il che implica che from components.java è di type: Jar anche.

Qualcuno può consigliare come posso far funzionare tutto questo?

Ora per concludere questa domanda, devo dire che Gradle ha una curva di apprendimento molto molto ripida. È un linguaggio informatico (DSL) quindi deve essere deterministico anche se a volte mi chiedo. Non ho le conoscenze per capire come funziona (per esempio) from components.java (# 1). Per tutta la documentazione disponibile (come http://www.gradle.org/docs/current/userguide/publishing_maven.html e la guida DSL), non è molto chiaro. Penso che la documentazione potrebbe essere molto più ricca. E ci deve essere un capitolo su "come ottenerlo". C'è qualche cambiamento di paradigma che sembra aver bisogno di capire!

# 1 - come meglio capisco questo ti dà quello che è a http://www.gradle.org/docs/nightly/userguide/java_plugin.html#sec:java_plugin_and_dependency_management ma come funziona con uno from e nel contesto di un MavenPublication?

+1

"una curva di apprendimento molto molto molto ripida" aggiungerei molto me stesso.Troppa magia e cattiva denominazione – mhstnsc

+0

hanno lo stesso problema sui vasi offuscati – mhstnsc

risposta

3

Here si possono trovare esempio di lavoro, è sufficiente invocare gradle clean publishToMavenLocal di avere artefatti costruire e pubblicati a Maven Maven repo locale (artefatto sarà preso dal numero di versione nome della cartella è specificato).

Sembra che il file build.gradle debba essere leggermente modificato. Il progetto è stato pubblicato, posso provare?

All'inizio, gradle sembra davvero difficile, ma dopo aver configurato i primi progetti lo prendi rapidamente.

EDIT (dopo la discussione nei commenti)

Per includere entrambe le fonti e le classi compilate in un unico barattolo aggiungere il seguente pezzo di codice per build.gradle:

jar { 
    from sourceSets.main.output 
    from sourceSets.main.allJava 
} 

E rimuovere compito sourceJar e artifact sezione da publications. Funziona comunque includendo entrambe le fonti e le classi compilate si chiudono in modo insolito e non è una buona idea.

Le dipendenze vengono aggiunte automaticamente installate pom.xml - vedere per guice. Ho aggiornato il progetto su GitHub.

+1

Sì, va bene - leggi l'errore e vedi che c'è uno scontro tra classificatore. E quindi scegli un classificatore diverso. Tuttavia, in realtà desidero che i sorgenti siano nello stesso contenitore per facilitare il debug. Non ho provato questo, ma immagino che se dipenderete dal vaso dei sorgenti, anche allora si otterrebbe lo stesso vantaggio di debug. Anche se questo dovrebbe funzionare, significa dover aggiungere la dipendenza solo per lo sviluppo. Immagino che potresti proteggerlo per accadere solo quando si sviluppa, ma poi diventa brutto, specialmente se ne hai un mucchio. Quindi vuoi - le fonti nello stesso barattolo E hanno le dipendenze nel pom. – HankCa

+0

Ok, ci proveremo domani. – Opal

+0

Grazie. Rileggo il mio commento e suona un po 'scortese. Intendevo dire che avrei dovuto leggere il messaggio di errore più da vicino per rendermi conto che si trattava di uno scontro di classificazione. Quindi grazie per averlo indicato. Ma sì, ho bisogno di un risultato diverso! – HankCa

Problemi correlati