SlideShare a Scribd company logo
#IOextendedGE16
DISTRIBUIRE UNA LIBRERIA JAVA
PER USARLA COME DIPENDENZA
GRADLE
+PaoloMontalto
#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
#IOextendedGE16
MAVEN
+PaoloMontalto
<dependency>
<groupId>it.xabaras.android.logger</groupId>
<artifactId>Logger</artifactId>
<version>1.3.6</version>
<type>pom</type>
</dependency>
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
REGISTRARSI SU BINTRAY
+PaoloMontalto
#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
CREARE UN PACKAGE NEL REPOSITORY MAVEN
+PaoloMontalto
#IOextendedGE16
CREARE UN PACKAGE NEL REPOSITORY MAVEN 2
+PaoloMontalto
#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
+PaoloMontalto
#IOextendedGE16
CARICARE GLI ARTIFACT SU BINTRAY 2
+PaoloMontalto
#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
SINCRONIZZARE IL REPOSITORY CON JCENTER
+PaoloMontalto
#IOextendedGE16
SINCRONIZZARE IL REPOSITORY CON JCENTER
+PaoloMontalto
#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
+PaoloMontalto
Libreria	Java		
jar	
Libreria	Android	
?
#IOextendedGE16
PUBBLICARE UNA LIBRERIA ANDROID
+PaoloMontalto
Libreria	Java		
jar	
Libreria	Android	
aar
#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 = ’p.montalto@xabaras.it'
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 = ’p.montalto@xabaras.it'
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 +PaoloMontalto
#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
p.montalto@xabaras.it

More Related Content

Similar to Distribuire una libreria Java per usarla come dipendenza gradle

VS Package @ CD2008
VS Package @ CD2008VS Package @ CD2008
VS Package @ CD2008
Mauro Servienti
 
Introduzione pratica a docker, da chi lo ha appena conosciuto
Introduzione pratica a docker, da chi lo ha appena conosciutoIntroduzione pratica a docker, da chi lo ha appena conosciuto
Introduzione pratica a docker, da chi lo ha appena conosciuto
Daniele Megna
 
Introduzione a Git
Introduzione a GitIntroduzione a Git
Introduzione a Git
Alfonso Piscitelli
 
Vagrant e Docker a confronto;scegliere ed iniziare
Vagrant e  Docker a confronto;scegliere ed iniziareVagrant e  Docker a confronto;scegliere ed iniziare
Vagrant e Docker a confronto;scegliere ed iniziare
Daniele Mondello
 
Basta problemi-con-tensorflow-usando-docker-nvidia-docker
Basta problemi-con-tensorflow-usando-docker-nvidia-dockerBasta problemi-con-tensorflow-usando-docker-nvidia-docker
Basta problemi-con-tensorflow-usando-docker-nvidia-docker
Nicola Landro
 
Docker vs Virtualizzazioni
Docker vs VirtualizzazioniDocker vs Virtualizzazioni
Docker vs Virtualizzazioni
Giuliano Latini
 
Apache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationApache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automation
Tiziano Serritella
 
Con Aruba, a lezione di cloud #lezione 30 - parte 1: 'GitLab e Cloud Server ...
Con Aruba, a lezione di cloud  #lezione 30 - parte 1: 'GitLab e Cloud Server ...Con Aruba, a lezione di cloud  #lezione 30 - parte 1: 'GitLab e Cloud Server ...
Con Aruba, a lezione di cloud #lezione 30 - parte 1: 'GitLab e Cloud Server ...
Aruba S.p.A.
 
Sencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceSencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codice
Giuseppe Toto
 
Docker jug taa
Docker   jug taaDocker   jug taa
Docker jug taa
Mario Alexandro Santini
 
Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]
Valerio Radice
 
Deploy Heroku-style di un child theme WordPress su VPS via GIT
Deploy Heroku-style di un child theme WordPress su VPS via GITDeploy Heroku-style di un child theme WordPress su VPS via GIT
Deploy Heroku-style di un child theme WordPress su VPS via GIT
Petrozzi Emilio
 
Presentazione CERT-CHECK
Presentazione CERT-CHECKPresentazione CERT-CHECK
Presentazione CERT-CHECK
Sergio Shevchenko
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacyTommaso Torti
 
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Aruba S.p.A.
 
TuxIsAlive
TuxIsAliveTuxIsAlive
TuxIsAlive
Claudio Mignanti
 
L'architettura di Stack Overflow - Mario Cecconi - Codemotion Milan 2014
L'architettura di Stack Overflow - Mario Cecconi - Codemotion Milan 2014L'architettura di Stack Overflow - Mario Cecconi - Codemotion Milan 2014
L'architettura di Stack Overflow - Mario Cecconi - Codemotion Milan 2014
Codemotion
 
Creazione componenti con Vue js
Creazione componenti con Vue jsCreazione componenti con Vue js
Creazione componenti con Vue js
Gianfranco Castro
 
Inversion of control e Dependency Injection (ITA)
Inversion of control e Dependency Injection (ITA)Inversion of control e Dependency Injection (ITA)
Inversion of control e Dependency Injection (ITA)
Giancarlo Valente
 
Tiscali bootcamp
Tiscali bootcampTiscali bootcamp
Tiscali bootcamp
Open Campus Tiscali
 

Similar to Distribuire una libreria Java per usarla come dipendenza gradle (20)

VS Package @ CD2008
VS Package @ CD2008VS Package @ CD2008
VS Package @ CD2008
 
Introduzione pratica a docker, da chi lo ha appena conosciuto
Introduzione pratica a docker, da chi lo ha appena conosciutoIntroduzione pratica a docker, da chi lo ha appena conosciuto
Introduzione pratica a docker, da chi lo ha appena conosciuto
 
Introduzione a Git
Introduzione a GitIntroduzione a Git
Introduzione a Git
 
Vagrant e Docker a confronto;scegliere ed iniziare
Vagrant e  Docker a confronto;scegliere ed iniziareVagrant e  Docker a confronto;scegliere ed iniziare
Vagrant e Docker a confronto;scegliere ed iniziare
 
Basta problemi-con-tensorflow-usando-docker-nvidia-docker
Basta problemi-con-tensorflow-usando-docker-nvidia-dockerBasta problemi-con-tensorflow-usando-docker-nvidia-docker
Basta problemi-con-tensorflow-usando-docker-nvidia-docker
 
Docker vs Virtualizzazioni
Docker vs VirtualizzazioniDocker vs Virtualizzazioni
Docker vs Virtualizzazioni
 
Apache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationApache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automation
 
Con Aruba, a lezione di cloud #lezione 30 - parte 1: 'GitLab e Cloud Server ...
Con Aruba, a lezione di cloud  #lezione 30 - parte 1: 'GitLab e Cloud Server ...Con Aruba, a lezione di cloud  #lezione 30 - parte 1: 'GitLab e Cloud Server ...
Con Aruba, a lezione di cloud #lezione 30 - parte 1: 'GitLab e Cloud Server ...
 
Sencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceSencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codice
 
Docker jug taa
Docker   jug taaDocker   jug taa
Docker jug taa
 
Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]
 
Deploy Heroku-style di un child theme WordPress su VPS via GIT
Deploy Heroku-style di un child theme WordPress su VPS via GITDeploy Heroku-style di un child theme WordPress su VPS via GIT
Deploy Heroku-style di un child theme WordPress su VPS via GIT
 
Presentazione CERT-CHECK
Presentazione CERT-CHECKPresentazione CERT-CHECK
Presentazione CERT-CHECK
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacy
 
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
 
TuxIsAlive
TuxIsAliveTuxIsAlive
TuxIsAlive
 
L'architettura di Stack Overflow - Mario Cecconi - Codemotion Milan 2014
L'architettura di Stack Overflow - Mario Cecconi - Codemotion Milan 2014L'architettura di Stack Overflow - Mario Cecconi - Codemotion Milan 2014
L'architettura di Stack Overflow - Mario Cecconi - Codemotion Milan 2014
 
Creazione componenti con Vue js
Creazione componenti con Vue jsCreazione componenti con Vue js
Creazione componenti con Vue js
 
Inversion of control e Dependency Injection (ITA)
Inversion of control e Dependency Injection (ITA)Inversion of control e Dependency Injection (ITA)
Inversion of control e Dependency Injection (ITA)
 
Tiscali bootcamp
Tiscali bootcampTiscali bootcamp
Tiscali bootcamp
 

Distribuire una libreria Java per usarla come dipendenza gradle

  • 1. #IOextendedGE16 DISTRIBUIRE UNA LIBRERIA JAVA PER USARLA COME DIPENDENZA GRADLE +PaoloMontalto
  • 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 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
  • 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 { }
  • 7. #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à
  • 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()
  • 11. #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
  • 13. #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
  • 14. #IOextendedGE16 CREARE UN PACKAGE NEL REPOSITORY MAVEN +PaoloMontalto
  • 15. #IOextendedGE16 CREARE UN PACKAGE NEL REPOSITORY MAVEN 2 +PaoloMontalto
  • 16. #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
  • 17. #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
  • 18. #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
  • 19. #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'] } } }
  • 20. #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'] } } }
  • 21. #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'] } } }
  • 22. #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'] } } }
  • 23. #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'] } } }
  • 24. #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
  • 25. #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
  • 26. #IOextendedGE16 CARICARE GLI ARTIFACT SU BINTRAY +PaoloMontalto
  • 27. #IOextendedGE16 CARICARE GLI ARTIFACT SU BINTRAY 2 +PaoloMontalto
  • 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' }
  • 29. #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
  • 30. #IOextendedGE16 SINCRONIZZARE IL REPOSITORY CON JCENTER +PaoloMontalto
  • 31. #IOextendedGE16 SINCRONIZZARE IL REPOSITORY CON JCENTER +PaoloMontalto
  • 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 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
  • 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 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
  • 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 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
  • 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 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
  • 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 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
  • 38. #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’) } }
  • 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 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
  • 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 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
  • 42. #IOextendedGE16 PUBBLICARE UNA LIBRERIA ANDROID +PaoloMontalto Libreria Java jar Libreria Android ?
  • 43. #IOextendedGE16 PUBBLICARE UNA LIBRERIA ANDROID +PaoloMontalto Libreria Java jar Libreria Android aar
  • 44. #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.
  • 45. #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
  • 46. #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 = ’p.montalto@xabaras.it' 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
  • 47. #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 = ’p.montalto@xabaras.it' 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
  • 48. #IOextendedGE16 PUBBLICARE UNA LIBRERIA ANDROID 5 +PaoloMontalto dependencies { compile 'it.xabaras.android:sliding-menu:0.1.2@aar' }
  • 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
  • 51. #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 p.montalto@xabaras.it

Editor's Notes

  1. 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 all’interno del mio progetto, senza preoccuparmi o preoccupandomi relativamente di come queste sono gestite, manutenute, reperite
  2. 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 all’interno del mio progetto, senza preoccuparmi o preoccupandomi relativamente di come queste sono gestite, manutenute, reperite
  3. Chiama artifact i deliverables
  4. Chiama artifact i deliverables
  5. 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
  6. 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 l’ha creata Siamo sicuri che versioni diverse di una libreria provengano sempre dallo stesso sviluppatore Sviluppatori all’interno dell’azienda useranno la stessa codebase
  7. Sono due i principali repository Maven Central è storicamente il repository di default di maven e anche di apache ant
  8. Jcenter fornisce artifact via CDN --> + veloce Jcenter è un sovrainsieme di maven central Jcenter è il default per android
  9. E’ possibile accedere tramite il proprio account GitHub, Twitter o Google+
  10. Non le mettete nel build.gradle e soprattutto ricordatevi di non caricare local.properties su git
  11. Siccome voglio caricare anche i sorgenti e la documentazione della mia libreria ho aggiunto questi due task
  12. Add to Jcenter è un’operazione che va fatta una sola volta, poi, quando pubblicate una nuova versione della vostra libreria questa verrà sincronizzata direttamente con jecenter
  13. 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
  14. Issue Jira: per chiedere il permesso di distribuire la libreria tramite Maven Central
  15. GPG: creare o avere una coppia di chiavi gpg caricarla sul server delle chiavi e inserirle su Bintray
  16. build.gradle oltre ad aggiungere i target maven e le credenziali sonatype devo anche preparare le informazioni per il file pom
  17. Sostituire configurations[‘archives’] con publications = ['mavenStuff']
  18. La sincronizzazione con maven va fatta puntualmente per ogni versione della libreria Nell’ultima versione del plugin bintray dovrebbe essere possibile sincronizzare con maven in automatico
  19. E’ un tipo di archivio creato appositamente per librerie android che sono più complesse perché contengono risorse, configurazioni, altre librerie…
  20. 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
  21. 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