Share
Embed
Distribuire una libreria java per usarla come dipendenza gradle
Presentation from Google I/O Extended Genova 2016.
Paolo Montalto
May 18, 2016
Transcript
51 slides
-
#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 -
#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 -
#IOextendedGE16 MAVEN +PaoloMontalto Forse il più noto sistema di build
automation ¤ consente di definire il ciclo di vita di un processo di build ¤ definisce le dipendenze del proge4o ¤ file di configurazione basa5 su XML ¤ repository di librerie 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 -
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 { } -
#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à -
#IOextendedGE16 MAVEN CENTRAL VS JCENTER +PaoloMontalto Maven Central h4p://search.maven.org JCenter
h4p://jcenter.bintray.com repositories { mavenCentral() } repositories { jcenter() } -
#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 -
#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() -
#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 -
#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 -
#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 -
#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 -
#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 -
#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'] } } } -
#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'] } } } -
#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'] } } } -
#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'] } } } -
#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'] } } } -
#IOextendedGE16 CONFIGURARE IL PROGETTO GRADLE 4 +PaoloMontalto task sourcesJar(type: Jar,
dependsOn: classes) { classifier = 'sources' from sourceSets.main.allSource } task javadocJar(type: Jar, dependsOn: javadoc) { classifier = 'javadoc' from javadoc.des5na5onDir } ar5facts { archives sourcesJar archives javadocJar } ¤ build.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 -
#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' } -
#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 -
#IOextendedGE16 PRONTI AD USARE LA LIBRERIA PUBBLICATA +PaoloMontalto repositories {
jcenter() } dependencies { … compile 'it.xabaras.android.logger:Logger:1.3.6’ … } -
#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 -
#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 -
#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 -
#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 -
#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 -
#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 = true passphrase = properties.getProperty('bintray_gpg_password’) } } -
#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 } } } } -
#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 -
#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 -
#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. -
#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 -
#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 -
#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 -
#IOextendedGE16 PUBBLICARE UNA LIBRERIA ANDROID 5 +PaoloMontalto dependencies { compile
'it.xabaras.android:sliding-menu:0.1.2@aar' } -
#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 -
#IOextendedGE16 GRAZIE PER L’ATTENZIONE https://github.com/xabaras/ http://www.slideshare.net/montypablo PAOLO MONTALTO 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]