L'utilizzo di dipendenze software 竪 una tecnica entrata gi da tempo nella pratica quotidiana di ciascun buon programmatore. I suoi vantaggi sono indubbi ma non tutti sanno come funzionano le dipendenze e come sia possibile rendere disponibile pubblicamente la propria libreria.
In questo talk cerco di spiegare per quale motivo 竪 importante utilizzare dipendenze software, come funzionano, perch辿 pu嘆 essere utile pubblicare le proprie librerie e come 竪 possibile farlo, mostrando un caso reale basato su Gradle.
1 of 51
Download to read offline
More Related Content
Distribuire una libreria Java per usarla come dipendenza gradle
2. #IOextendedGE16
DIPENDENZE
+PaoloMontalto
Librerie di terze parti o altri progetti necessari
alla compilazione di un progetto software
Non ha senso:
造 Reinventare la ruota ad ogni nuovo progetto
造 Portarsi dietro delle classi facendo copia e incolla da altri progetti
造 Portarsi dietro dei jar di versione e provenienza dubbia
造 Fare copia e incolla da Stackoverflow
3. #IOextendedGE16
DIPENDENZE
+PaoloMontalto
Librerie di terze parti o altri progetti necessari
alla compilazione di un progetto software
Non ha senso:
造 Reinventare la ruota ad ogni nuovo progetto
造 Portarsi dietro delle classi facendo copia e incolla da altri progetti
造 Portarsi dietro dei jar di versione e provenienza dubbia
造 Fare copia e incolla da Stackoverflow
build automation
4. #IOextendedGE16
MAVEN
+PaoloMontalto
Forse il pi湛 noto sistema di build automation
造consente di de鍖nire il ciclo di vita di un processo di build
造de鍖nisce le dipendenze del proge4o
造鍖le di con鍖gurazione basa5 su XML
造repository di librerie
Identi鍖ca le dipendenze tramite
groupId identi鍖ca il progetto univocamente it.xabaras.android.logger
artifactId 竪 il nome della libreria (senza versione) Logger
version 竪 il numero di versione della libreria 1.3.6
E possibile distribuire pi湛 artifact nella stessa versione:
libreria, documentazione, sorgenti
6. version
#IOextendedGE16
GRADLE
+PaoloMontalto
Sistema di build automation
造mul5pia4aforma
造mul5linguaggio
造mul5proge4o
造DSL basato su groovy
造build incrementali
造notazione compa4a per le dipendenze
造Usa maven come repository locale/remoto per le dipendenze
compile 'it.xabaras.android.logger:Logger:1.3.6
groupId
ar5factId dependencies {
}
8. #IOextendedGE16
MAVEN CENTRAL VS JCENTER
+PaoloMontalto
Maven Central
h4p://search.maven.org
JCenter
h4p://jcenter.bintray.com
repositories {
mavenCentral()
}
repositories {
jcenter()
}
9. #IOextendedGE16
MAVEN CENTRAL VS JCENTER
+PaoloMontalto
Maven Central
h4p://search.maven.org
JCenter
h4p://jcenter.bintray.com
Sonatype
造 Linea di commando
造 Jira ticket
造 cifratura build
JFrog
造 Web UI
造 semplice da usare (no cifratura)
造 Integrazione con GitHub e BitBucket
造 Sincronizzazione con Maven Central
造 Statistiche di download
10. #IOextendedGE16
MAVEN CENTRAL VS JCENTER
+PaoloMontalto
Maven Central
h4p://search.maven.org
JCenter
h4p://jcenter.bintray.com
Sonatype
造 Linea di commando
造 Jira ticket
造 cifratura build
JFrog
造 Web UI
造 semplice da usare (no cifratura)
造 Integrazione con GitHub e BitBucket
造 Sincronizzazione con Maven Central
造 Statistiche di download
>=
mavenCentral()
28. #IOextendedGE16
CARICARE GLI ARTIFACT SU BINTRAY 3
+PaoloMontalto
La libreria 竪 sul vostro repository maven ma non su jcenter
repositories {
maven {
url 'h4ps://dl.bintray.com/xabaras/maven'
}
}
...
dependencies {
compile 'it.xabaras.android.logger:Logger:1.3.6'
}
32. #IOextendedGE16
PRONTI AD USARE LA LIBRERIA PUBBLICATA
+PaoloMontalto
repositories {
jcenter()
}
dependencies {
compile 'it.xabaras.android.logger:Logger:1.3.6
}
33. #IOextendedGE16
PUBBLICARE ANCHE SU MAVEN CENTRAL
+PaoloMontalto
造Creare un account Sonatype
造Creare una issue su JIRA
造Aggiungere lo username Sonatype su Bintray
造Abilitare lauto signing delle build su Bintray (coppia chiavi GPG)
造Con鍖gurare il build.gradle
造Caricare gli artifact su bintray
造Sincronizzare il repository con Maven Central
34. #IOextendedGE16
PUBBLICARE ANCHE SU MAVEN CENTRAL 2
+PaoloMontalto
造Creare un account Sonatype
造Creare una issue su JIRA
造Aggiungere lo username Sonatype su Bintray
造Abilitare lauto signing delle build su Bintray (coppia chiavi GPG)
造Con鍖gurare il build.gradle
造Caricare gli artifact su bintray
造Sincronizzare il repository con Maven Central
35. #IOextendedGE16
PUBBLICARE ANCHE SU MAVEN CENTRAL 3
+PaoloMontalto
造Creare un account Sonatype
造Creare una issue su JIRA
造Aggiungere lo username Sonatype su Bintray
造Abilitare lauto signing delle build su Bintray (coppia chiavi GPG)
造Con鍖gurare il build.gradle
造Caricare gli artifact su bintray
造Sincronizzare il repository con Maven Central
36. #IOextendedGE16
PUBBLICARE ANCHE SU MAVEN CENTRAL 4
+PaoloMontalto
造Creare un account Sonatype
造Creare una issue su JIRA
造Aggiungere lo username Sonatype su Bintray
造Abilitare lauto signing delle build su Bintray (coppia chiavi GPG)
造Con鍖gurare il build.gradle
造Caricare gli artifact su bintray
造Sincronizzare il repository con Maven Central
37. #IOextendedGE16
PUBBLICARE ANCHE SU MAVEN CENTRAL 5
+PaoloMontalto
造Creare un account Sonatype
造Creare una issue su JIRA
造Aggiungere lo username Sonatype su Bintray
造Abilitare lauto signing delle build su Bintray (coppia chiavi GPG)
造Con鍖gurare il build.gradle
造Caricare gli artifact su bintray
造Sincronizzare il repository con Maven Central
38. #IOextendedGE16
PUBBLICARE ANCHE SU MAVEN CENTRAL 5
+PaoloMontalto
造 local.properties
bintray_gpg_password=LA_MIA_PASSWORD_GPG
造 build.gradle
bintray {
con鍖gurations = [archives]
publications = ['mavenStu鍖']
version {
gpg {
sign = true
passphrase = properties.getProperty('bintray_gpg_password)
}
}
39. #IOextendedGE16
PUBBLICARE ANCHE SU MAVEN CENTRAL 5
+PaoloMontalto
造 build.gradle
publishing {
publications {
mavenStuff(MavenPublication) {
from components.java
groupId group
artifactId rootProject.name
version version
artifact sourcesJar
artifact javadocJar
pom.withXml {
// package name, description, licenses and developer info
}
}
}
}
40. #IOextendedGE16
PUBBLICARE ANCHE SU MAVEN CENTRAL 6
+PaoloMontalto
造Creare un account Sonatype
造Creare una issue su JIRA
造Aggiungere lo username Sonatype su Bintray
造Abilitare lauto signing delle build su Bintray (coppia chiavi GPG)
造Con鍖gurare il build.gradle
造Caricare gli artifact su bintray
造Sincronizzare il repository con Maven Central
41. #IOextendedGE16
PUBBLICARE ANCHE SU MAVEN CENTRAL 7
+PaoloMontalto
造Creare un account Sonatype
造Creare una issue su JIRA
造Aggiungere lo username Sonatype su Bintray
造Abilitare lauto signing delle build su Bintray (coppia chiavi GPG)
造Con鍖gurare il build.gradle
造Caricare gli artifact su bintray
造Sincronizzare il repository con Maven Central
49. #IOextendedGE16
QUALCHE RIFERIMENTO
+PaoloMontalto
造 How to distribute your own Android library through jCenter and Maven Central from
Android Studio @TheCheeseFact
造 Distribute your libraries via Maven, even privately @molsjeroen
造 Getting Started Using the Gradle Bintray Plugin bintray/gradle-bintray-plugin
#3:
Non si sa che versione stiamo usando di una data libreria e non 竪 facile capirlo
Molto pi湛 utile 竪 avere un sistema che mi permetta di specificare quali librerie uso allinterno del mio progetto, senza preoccuparmi o preoccupandomi relativamente di come queste sono gestite, manutenute, reperite
#4:
Non si sa che versione stiamo usando di una data libreria e non 竪 facile capirlo
Molto pi湛 utile 竪 avere un sistema che mi permetta di specificare quali librerie uso allinterno del mio progetto, senza preoccuparmi o preoccupandomi relativamente di come queste sono gestite, manutenute, reperite
#7:
Apache Maven definisce il ciclo di vita di un processo, in Apache Ant ordine dei target dipende dalle dipendenze, Gradle 竪 basato su grafo e determina quali task vanno rieseguiti o meno
Multilinguaggio: decine di lunguaggi tra i quali Java, Python, Scala, C++, Android, Objective-C, Javascript
#8:
Includo le mie librerie come dipendenze anche nei miei progetti
Le librerie vengono scaricate da server quali mavenCentral o Jcenter e quindi siamo sicuri che quando usiamo una libreria questa provenga realmente dallo sviluppatore che lha creata
Siamo sicuri che versioni diverse di una libreria provengano sempre dallo stesso sviluppatore
Sviluppatori allinterno dellazienda useranno la stessa codebase
#9:
Sono due i principali repository
Maven Central 竪 storicamente il repository di default di maven e anche di apache ant
#11:
Jcenter fornisce artifact via CDN --> + veloce
Jcenter 竪 un sovrainsieme di maven central
Jcenter 竪 il default per android
#13:
E possibile accedere tramite il proprio account GitHub, Twitter o Google+
#19:
Non le mettete nel build.gradle e soprattutto ricordatevi di non caricare local.properties su git
#25:
Siccome voglio caricare anche i sorgenti e la documentazione della mia libreria ho aggiunto questi due task
#32:
Add to Jcenter 竪 unoperazione che va fatta una sola volta, poi, quando pubblicate una nuova versione della vostra libreria questa verr sincronizzata direttamente con jecenter
#34:
Issue Jira: per chiedere il permesso di distribuire la libreria tramite Maven Central
GPG: creare o avere una coppia di chiavi gpg caricarla sul server delle chiavi e inserirle su Bintray
build.gradle oltre ad aggiungere i target maven e le credenziali sonatype devo anche preparare le informazioni per il file pom
#35:
Issue Jira: per chiedere il permesso di distribuire la libreria tramite Maven Central
#37:
GPG: creare o avere una coppia di chiavi gpg caricarla sul server delle chiavi e inserirle su Bintray
#38:
build.gradle oltre ad aggiungere i target maven e le credenziali sonatype devo anche preparare le informazioni per il file pom
#39:
Sostituire configurations[archives] con publications = ['mavenStuff']
#42:
La sincronizzazione con maven va fatta puntualmente per ogni versione della libreria
Nellultima versione del plugin bintray dovrebbe essere possibile sincronizzare con maven in automatico
#45:
E un tipo di archivio creato appositamente per librerie android che sono pi湛 complesse perch辿 contengono risorse, configurazioni, altre librerie
#47:
I due apply vanno in fondo al file sono due script che fanno sostanzialmente quello che abbiamo fatto noi con la libreria jar ma sono scritti per la struttura di un aar che 竪 pi湛 complessa
#48:
Questi due script che automatizzano un po tutto quello che abbiamo fatto finora per la libreria java creando il pom e mettendo le informazioni al posto giusto sia nella sezione del plugin bintray che nella sezione maven