際際滷

際際滷Share 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	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
#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 鍖le
造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
造Con鍖gurare 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
造Con鍖gurare 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
造Con鍖gurare 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",
"Speci鍖cation-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)
con鍖gurations = [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)
con鍖gurations = [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)
con鍖gurations = [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)
con鍖gurations = [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)
con鍖gurations = [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)	{	
				classi鍖er	=	'sources'	
				from	sourceSets.main.allSource	
}	
	
task	javadocJar(type:	Jar,	dependsOn:	javadoc)	{	
				classi鍖er	=	'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
造Con鍖gurare 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
造Con鍖gurare 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 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
#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
#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
#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
#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
#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)
}
}
#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 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
#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
#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 LATTENZIONE
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

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 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 { }
  • 7. #IOextendedGE16 PERCH DISTRIBUIRE LIBRERIE? +PaoloMontalto 造Riuso del codice 造Librerie disponibili online sempre 造Rendere disponibili versioni aggiornate 造Certezza della provenienza dei 鍖le 造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 造Con鍖gurare 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 造Con鍖gurare 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 造Con鍖gurare 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", "Speci鍖cation-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) con鍖gurations = [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) con鍖gurations = [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) con鍖gurations = [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) con鍖gurations = [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) con鍖gurations = [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) { classi鍖er = 'sources' from sourceSets.main.allSource } task javadocJar(type: Jar, dependsOn: javadoc) { classi鍖er = '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 造Con鍖gurare 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 造Con鍖gurare 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 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
  • 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 LATTENZIONE 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

  • #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
  • #5: Chiama artifact i deliverables
  • #6: Chiama artifact i deliverables
  • #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