distribuire una libreria java per usarla come dipendenza gradle

51
#IOextendedGE16 DISTRIBUIRE UNA LIBRERIA JAVA PER USARLA COME DIPENDENZA GRADLE +PaoloMontalto

Upload: paolo-montalto

Post on 20-Jan-2017

725 views

Category:

Presentations & Public Speaking


0 download

TRANSCRIPT

Page 1: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

DISTRIBUIRE UNA LIBRERIA JAVA PER USARLA COME DIPENDENZA GRADLE

+PaoloMontalto

Page 2: Distribuire una libreria Java per usarla come dipendenza gradle

#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

Page 3: Distribuire una libreria Java per usarla come dipendenza gradle

#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

Page 4: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

MAVEN

+PaoloMontalto

Forse il più noto sistema di build automation ¤ consentedidefinireilciclodivitadiunprocessodibuild¤ definisceledipendenzedelproge4o¤ filediconfigurazionebasa5suXML¤ repositorydilibrerie

Identifica le dipendenze tramite

groupId identifica 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

Page 5: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

MAVEN

+PaoloMontalto

<dependency> <groupId>it.xabaras.android.logger</groupId> <artifactId>Logger</artifactId> <version>1.3.6</version> <type>pom</type> </dependency>

Page 6: Distribuire una libreria Java per usarla come dipendenza gradle

version

#IOextendedGE16

GRADLE

+PaoloMontalto

Sistema di build automation

¤ mul5pia4aforma¤ mul5linguaggio¤ mul5proge4o¤ DSLbasatosugroovy¤ buildincrementali

¤ notazionecompa4aperledipendenze¤ Usamavencomerepositorylocale/remotoperledipendenze

compile 'i t .xabaras.android. logger :Logger :1.3.6’ groupId

ar5factIddependencies {

}

Page 7: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

PERCHÉ DISTRIBUIRE LIBRERIE?

+PaoloMontalto

¤ Riuso del codice ¤ Librerie disponibili online sempre ¤ Rendere disponibili versioni aggiornate ¤ Certezza della provenienza dei file ¤ Maggiore facilità manutenzione ¤ Contribuire alla comunità

Page 8: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

MAVEN CENTRAL VS JCENTER

+PaoloMontalto

MavenCentralh4p://search.maven.org

JCenterh4p://jcenter.bintray.com

repositories { mavenCentral()

}

repositories { jcenter()

}

Page 9: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

MAVEN CENTRAL VS JCENTER

+PaoloMontalto

MavenCentralh4p://search.maven.org

JCenterh4p://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

Page 10: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

MAVEN CENTRAL VS JCENTER

+PaoloMontalto

MavenCentralh4p://search.maven.org

JCenterh4p://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()

Page 11: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

PUBBLICARE SU JCENTER

+PaoloMontalto

¤ Registrarsi su Bintray ¤ Creare un package nel repository maven ¤ Configurare il progetto gradle ¤ Caricare gli artifact su bintray ¤ Sincronizzare il repository con jcenter

Page 12: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

REGISTRARSI SU BINTRAY

+PaoloMontalto

Page 13: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

PUBBLICARE SU JCENTER

+PaoloMontalto

¤ Registrarsi su Bintray ¤ Creare un package nel repository maven ¤ Configurare il progetto gradle ¤ Caricare gli artifact su bintray ¤ Sincronizzare il repository con jcenter

Page 14: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

CREARE UN PACKAGE NEL REPOSITORY MAVEN

+PaoloMontalto

Page 15: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

CREARE UN PACKAGE NEL REPOSITORY MAVEN 2

+PaoloMontalto

Page 16: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

PUBBLICARE SU JCENTER

+PaoloMontalto

¤ Registrarsi su Bintray ¤ Creare un package nel repository maven ¤ Configurare il progetto gradle ¤ Caricare gli artifact su bintray ¤ Sincronizzare il repository con jcenter

Page 17: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

CONFIGURARE IL PROGETTO GRADLE

+PaoloMontalto

¤  settings.gradle

apply plugin: 'java’ group 'it.xabaras.android.logger' version '1.3.6’ jar { manifest { attributes( "Created-By": "Paolo Montalto", "Specification-Title": rootProject.name, "Implementation-Title": group, "Implementation-Version": version ) } } dependencies { testCompile group: 'junit', name: 'junit', version: '4.11' ... }

rootProject.name = 'Logger'

¤  build.gradle

Page 18: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

CONFIGURARE IL PROGETTO GRADLE 2

+PaoloMontalto

¤  Bintray plugin (build.gradle) plugins { id "com.jfrog.bintray" version "1.6" }

¤  local.properties

bintray.user=xabaras bintray.apiKey=abcdefghijklmnopqrstuwxyz1234567890ABCDE

Page 19: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

CONFIGURARE IL PROGETTO GRADLE 3

+PaoloMontalto

¤  build.gradle

bintray { user = properties.getProperty('bintray.user’) key = properties.getProperty('bintray.apiKey’) configurations = [’archives’] publish = true pkg { repo = 'maven' name = 'Logger' desc = 'A simple class wrapping android logger introducing some utilities. ' websiteUrl = 'https://github.com/xabaras/Logger' issueTrackerUrl = 'https://github.com/xabaras/Logger/issues' vcsUrl = 'https://github.com/xabaras/Logger.git' licenses = ['Apache-2.0'] publicDownloadNumbers = true version { name = project['version'] desc = 'Logger ' + project['version'] } } }

Page 20: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

CONFIGURARE IL PROGETTO GRADLE 3

+PaoloMontalto

¤  build.gradle

bintray { user = properties.getProperty('bintray.user’) key = properties.getProperty('bintray.apiKey’) configurations = [’archives’] publish = true pkg { repo = 'maven' name = 'Logger' desc = 'A simple class wrapping android logger introducing some utilities. ' websiteUrl = 'https://github.com/xabaras/Logger' issueTrackerUrl = 'https://github.com/xabaras/Logger/issues' vcsUrl = 'https://github.com/xabaras/Logger.git' licenses = ['Apache-2.0'] publicDownloadNumbers = true version { name = project['version'] desc = 'Logger ' + project['version'] } } }

Page 21: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

CONFIGURARE IL PROGETTO GRADLE 3

+PaoloMontalto

¤  build.gradle

bintray { user = properties.getProperty('bintray.user’) key = properties.getProperty('bintray.apiKey’) configurations = [’archives’] publish = true pkg { repo = 'maven' name = 'Logger' desc = 'A simple class wrapping android logger introducing some utilities. ' websiteUrl = 'https://github.com/xabaras/Logger' issueTrackerUrl = 'https://github.com/xabaras/Logger/issues' vcsUrl = 'https://github.com/xabaras/Logger.git' licenses = ['Apache-2.0'] publicDownloadNumbers = true version { name = project['version'] desc = 'Logger ' + project['version'] } } }

Page 22: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

CONFIGURARE IL PROGETTO GRADLE 3

+PaoloMontalto

¤  build.gradle

bintray { user = properties.getProperty('bintray.user’) key = properties.getProperty('bintray.apiKey’) configurations = [’archives’] publish = true pkg { repo = 'maven' name = 'Logger' desc = 'A simple class wrapping android logger introducing some utilities. ' websiteUrl = 'https://github.com/xabaras/Logger' issueTrackerUrl = 'https://github.com/xabaras/Logger/issues' vcsUrl = 'https://github.com/xabaras/Logger.git' licenses = ['Apache-2.0'] publicDownloadNumbers = true version { name = project['version'] desc = 'Logger ' + project['version'] } } }

Page 23: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

CONFIGURARE IL PROGETTO GRADLE 3

+PaoloMontalto

¤  build.gradle

bintray { user = properties.getProperty('bintray.user’) key = properties.getProperty('bintray.apiKey’) configurations = [’archives’] publish = true pkg { repo = 'maven' name = 'Logger' desc = 'A simple class wrapping android logger introducing some utilities. ' websiteUrl = 'https://github.com/xabaras/Logger' issueTrackerUrl = 'https://github.com/xabaras/Logger/issues' vcsUrl = 'https://github.com/xabaras/Logger.git' licenses = ['Apache-2.0'] publicDownloadNumbers = true version { name = project['version'] desc = 'Logger ' + project['version'] } } }

Page 24: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

CONFIGURARE IL PROGETTO GRADLE 4

+PaoloMontalto

tasksourcesJar(type:Jar,dependsOn:classes){classifier='sources'fromsourceSets.main.allSource}taskjavadocJar(type:Jar,dependsOn:javadoc){classifier='javadoc'fromjavadoc.des5na5onDir}ar5facts{archivessourcesJararchivesjavadocJar}

¤  build.gradle

Page 25: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

PUBBLICARE SU JCENTER

+PaoloMontalto

¤ Registrarsi su Bintray ¤ Creare un package nel repository maven ¤ Configurare il progetto gradle ¤ Caricare gli artifact su bintray ¤ Sincronizzare il repository con jcenter

Page 26: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

CARICARE GLI ARTIFACT SU BINTRAY

+PaoloMontalto

Page 27: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

CARICARE GLI ARTIFACT SU BINTRAY 2

+PaoloMontalto

Page 28: Distribuire una libreria Java per usarla come dipendenza gradle

#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'}

Page 29: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

PUBBLICARE SU JCENTER

+PaoloMontalto

¤ Registrarsi su Bintray ¤ Creare un package nel repository maven ¤ Configurare il progetto gradle ¤ Caricare gli artifact su bintray ¤ Sincronizzare il repository con jcenter

Page 30: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

SINCRONIZZARE IL REPOSITORY CON JCENTER

+PaoloMontalto

Page 31: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

SINCRONIZZARE IL REPOSITORY CON JCENTER

+PaoloMontalto

Page 32: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

PRONTI AD USARE LA LIBRERIA PUBBLICATA

+PaoloMontalto

repositories { jcenter()

} dependencies {

… compile 'it.xabaras.android.logger:Logger:1.3.6’ …

}

Page 33: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

PUBBLICARE ANCHE SU MAVEN CENTRAL

+PaoloMontalto

¤ Creare un account Sonatype ¤ Creare una issue su JIRA ¤ Aggiungere lo username Sonatype su Bintray ¤ Abilitare l’auto signing delle build su Bintray (coppia chiavi GPG) ¤ Configurare il build.gradle ¤ Caricare gli artifact su bintray ¤ Sincronizzare il repository con Maven Central

Page 34: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

PUBBLICARE ANCHE SU MAVEN CENTRAL 2

+PaoloMontalto

¤ Creare un account Sonatype ¤ Creare una issue su JIRA ¤ Aggiungere lo username Sonatype su Bintray ¤ Abilitare l’auto signing delle build su Bintray (coppia chiavi GPG) ¤ Configurare il build.gradle ¤ Caricare gli artifact su bintray ¤ Sincronizzare il repository con Maven Central

Page 35: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

PUBBLICARE ANCHE SU MAVEN CENTRAL 3

+PaoloMontalto

¤ Creare un account Sonatype ¤ Creare una issue su JIRA ¤ Aggiungere lo username Sonatype su Bintray ¤ Abilitare l’auto signing delle build su Bintray (coppia chiavi GPG) ¤ Configurare il build.gradle ¤ Caricare gli artifact su bintray ¤ Sincronizzare il repository con Maven Central

Page 36: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

PUBBLICARE ANCHE SU MAVEN CENTRAL 4

+PaoloMontalto

¤ Creare un account Sonatype ¤ Creare una issue su JIRA ¤ Aggiungere lo username Sonatype su Bintray ¤ Abilitare l’auto signing delle build su Bintray (coppia chiavi GPG) ¤ Configurare il build.gradle ¤ Caricare gli artifact su bintray ¤ Sincronizzare il repository con Maven Central

Page 37: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

PUBBLICARE ANCHE SU MAVEN CENTRAL 5

+PaoloMontalto

¤ Creare un account Sonatype ¤ Creare una issue su JIRA ¤ Aggiungere lo username Sonatype su Bintray ¤ Abilitare l’auto signing delle build su Bintray (coppia chiavi GPG) ¤ Configurare il build.gradle ¤ Caricare gli artifact su bintray ¤ Sincronizzare il repository con Maven Central

Page 38: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

PUBBLICARE ANCHE SU MAVEN CENTRAL 5

+PaoloMontalto

¤  local.properties

bintray_gpg_password=LA_MIA_PASSWORD_GPG

¤  build.gradle

bintray { configurations = [’archives’] publications = ['mavenStuff'] version { … gpg { sign =truepassphrase = properties.getProperty('bintray_gpg_password’) } }

Page 39: Distribuire una libreria Java per usarla come dipendenza gradle

#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 } } } }

Page 40: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

PUBBLICARE ANCHE SU MAVEN CENTRAL 6

+PaoloMontalto

¤ Creare un account Sonatype ¤ Creare una issue su JIRA ¤ Aggiungere lo username Sonatype su Bintray ¤ Abilitare l’auto signing delle build su Bintray (coppia chiavi GPG) ¤ Configurare il build.gradle ¤ Caricare gli artifact su bintray ¤ Sincronizzare il repository con Maven Central

Page 41: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

PUBBLICARE ANCHE SU MAVEN CENTRAL 7

+PaoloMontalto

¤ Creare un account Sonatype ¤ Creare una issue su JIRA ¤ Aggiungere lo username Sonatype su Bintray ¤ Abilitare l’auto signing delle build su Bintray (coppia chiavi GPG) ¤ Configurare il build.gradle ¤ Caricare gli artifact su bintray ¤ Sincronizzare il repository con Maven Central

Page 42: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

PUBBLICARE UNA LIBRERIA ANDROID

+PaoloMontalto

LibreriaJava

jar

LibreriaAndroid

?

Page 43: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

PUBBLICARE UNA LIBRERIA ANDROID

+PaoloMontalto

LibreriaJava

jar

LibreriaAndroid

aar

Page 44: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

PUBBLICARE UNA LIBRERIA ANDROID 2

+PaoloMontalto

Android Archive Library ¤  AndroidManifest.xml ¤  classi java (classes.jar) ¤  risorse (cartella “res”) ¤  assets ¤  I jar della cartella libs ¤  librerie JNI ¤  etc.

Page 45: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

PUBBLICARE UNA LIBRERIA ANDROID 3

+PaoloMontalto

¤  local.properties bintray.user=xabaras bintray.apiKey=abcdefghijklmnopqrstuwxyz1234567890ABCD bintray.gpg.password=LA_MIA_PASSWORD_GPG

dependencies {     classpath 'com.android.tools.build:gradle:1.1.2+'     classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'     classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3' }

¤  build.gradle

Page 46: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

PUBBLICARE UNA LIBRERIA ANDROID 4

+PaoloMontalto

apply plugin: 'com.android.library' ext { bintrayRepo = 'maven' bintrayName = ’sliding-menu' publishedGroupId = ’it.xabaras.android’ libraryName = ’SlidingMenu' artifact = ’sliding-menu’ libraryDescription = ’A Facebook like sliding menu for Android apps’ libraryVersion = '0.1.2' developerId = ’xabaras' developerName = ’Paolo Montalto' developerEmail = ’[email protected]' licenseName = 'The Apache Software License, Version 2.0' licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt' allLicenses = [‘Apache-2.0’] } apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/installv1.gradle' apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/bintrayv1.gradle'

¤  build.gradle

Page 47: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

PUBBLICARE UNA LIBRERIA ANDROID 4

+PaoloMontalto

apply plugin: 'com.android.library' ext { bintrayRepo = 'maven' bintrayName = ’sliding-menu' publishedGroupId = ’it.xabaras.android’ libraryName = ’SlidingMenu' artifact = ’sliding-menu’ libraryDescription = ’A Facebook like sliding menu for Android apps’ libraryVersion = '0.1.2' developerId = ’xabaras' developerName = ’Paolo Montalto' developerEmail = ’[email protected]' licenseName = 'The Apache Software License, Version 2.0' licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt' allLicenses = [‘Apache-2.0’] } apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/installv1.gradle' apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/bintrayv1.gradle'

¤  build.gradle

Page 48: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

PUBBLICARE UNA LIBRERIA ANDROID 5

+PaoloMontalto

dependencies{compile'it.xabaras.android:sliding-menu:0.1.2@aar'}

Page 49: Distribuire una libreria Java per usarla come dipendenza gradle

#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

Page 50: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16 +PaoloMontalto

Page 51: Distribuire una libreria Java per usarla come dipendenza gradle

#IOextendedGE16

GRAZIE PER L’ATTENZIONE

https://github.com/xabaras/

http://www.slideshare.net/montypablo

PAOLOMONTALTO

http://www.xabaras.it

https://it.linkedin.com/in/paolomontalto

Always code as if the guy who ends up maintaining your code

will be a violent psychopath who knows where you live.

John F. Woods

+PaoloMontalto

[email protected]