Archivi categoria: Gradle

Gradle da dove iniziare ? – principi fondamentali – Build Language Reference – 2015

FONTE ORIGINALE (docs.gradle.org)
FONTE IMMAGINI (www.drdobbs.com)

Gradle build è un programma, che utilizza un linguaggio chiamato Groovy(linguaggio di programmazione ad oggetti per la Piattaforma Java alternativo al linguaggio Java).

Gradle gestisce diversi compiti (task), ogni task è un oggetto (object) che ha una API e deve compiere una lista di attività, la forma delle task utilizza a directed acyclic graph algorithm.

Introduzione

Questa guida descrive i vari tipi che compongono il linguaggio di “Build” Gradle o DSL (Linguaggio di Dominio Specifico).

Gradle appissue
Gradle appissue

Alcuni principi fondamentali

Ci sono alcuni concetti di base che si dovrebbero capire, che vi aiuteranno  a scrivere degli scripts in Gradle.

In primo luogo, gli scripts Gradle sono degli script di configurazione (realizzazione). Come lo script viene eseguito, si configura un oggetto di un tipo particolare. Un esempio, di come viene eseguito uno script di Build (configurazione), si configura un oggetto di tipo di Progetto (Project). Questo oggetto è chiamato l’oggetto delegato(Delegate) dello script.

La tabella seguente mostra il delegato per ogni tipo di script Gradle.

Tipi di script                                                                                     Delegati come istanza di

Build script (di configurazione o realizzazione)           Project (progetto)

Init script (di inizializzazione)                                                  Gradle

Settings script (di impostazioni)                                             Settings (Impostazioni)

Le proprietà ei metodi dell’oggetto delegato sono disponibili per il suo utilizzo nello script.

In secondo luogo, ogni script Gradle implementa uno script di tipo interfaccia(script interface) . Questa interfaccia definisce una serie di proprietà e di metodi che è possibile utilizzare all’interno dello script.

Struttura dello script di configurazione(build)
Uno script di build è composta da zero o più dichiarazioni  di blocchi di script. Le dichiarazioni possono includere metodo di chiamate, assegnazioni di proprietà, e delle definizioni di variabili locali.   Un blocco di script è una metodo chiamante che prende una clousure come parametro. La clousure è trattata come una configurazione  di una clousure che consente di configurare come eseguire (execute) un oggetto delegato.

Gradle appissue
Gradle appissue

Come capire le Clousure ? (a.d.t)
come particolare tecnica di mantenimento dello stato –  una inner function è una funzione che viene definita all’interno di un’altra funzione). vedi (http://stacktrace.it/2007/12/22/javascript-closures/

  • clousure come una una funzione che può essere assegnata ad una variabile e che è in grado di interagire con le variabili presenti nell’ambiente che la definisce** ( vedi http://www.sullaprogrammazione.com/le-closures-e-c.html e http://gafter.blogspot.it/
  • Una clousure è una forma di funzione anonima. Si dichiara con la seguente sintassi:  { parametri formali => istruzioni o espressione }. Parametri formali, dichiarazioni, e l’espressione sono facoltativi in questa clausola. Ad esempio, {int x => x + 1} è una funzione che prende un singolo argomento int e restituisce il suo valore incrementato di 1. La closure può essere richiamata dal Invoke Method. Ad esempio, {int x => x + 1} .invoke (10) chiamerà la chiusura con l’argomento 10.(vedi http://tronicek.blogspot.it/2007/12/closures-closure-is-form-of-anonymous_28.html)
gradle code android vs maven appissue
gradle code android vs maven appissue

I blocchi di scripts di livello superiore sono elencati di seguito.
allprojects { }  
Configura questo progetto(project) e ciascuno dei suoi sotto-progetti(sub-projects).
artifacts { }
Configura gli elementi (artifacts) pubblicate(rilasciate) per questo progetto(project).
buildscript { }
Configura classpath* di build (configurazione) per questo progetto(project)
configurations { }  
Definisce le configurazioni di dipendenza(dependencies)  per questo progetto.
dependencies { }
Configura le dipendenze per questo progetto.
repositories { } 
Configura i repository per questo progetto.
sourceSets { }
Configura impostazioni di origine (source sets)  di questo progetto.
subprojects { }
Configura i sotto-progetti di questo progetto.
publishing { }
Configura le PublishingExtension aggiunte dal plugin di rilascio(pubblicazione).

Uno script di build(impostazioni) è anche uno script Groovy, e quindi può contenere quegli elementi consentiti in uno script Groovy, quali le definizioni dei metodi e le definizioni di classe.

TIPI FONDAMENTALI

Di seguito sono elencati alcuni dei tipi di base che vengono utilizzati negli script di Gradle:

Project (progetto)
Questa interfaccia è l’API principale utilizzata per interagire con Gradle attraverso  il proprio file di build (grade.build)    Da Project(progetto), si ha accesso programmatico a tutte le funzioni di Gradle.

Task (compito)
Una task(compito) rappresenta un pezzo unico e atomica di lavoro per un file di build(impostazioni), come ad esempio la compilazione delle classi o la generazione di un javadoc.

 Gradle
Rappresenta una invocazione(chiamata) a Gradle.

 Settings  (impostazioni)
Rappresenta e dichiara la configurazione necessaria per istanziare e configurare le gerarchie del progetto(project), istanze che faranno parte del suo file di build (file di configurazione).  

Script    (copione)
Questa interfaccia è implementata da tutti gli script(copioni) di  Gradle con il fine di aggiungere alcuni dei metodi specifici di Gradle. Non appena si compila la classe dello script se implementerà questa interfaccia , e si potranno  allora utilizzare direttamente tutti i metodi e proprietà dichiarati nella interfaccia.

 JavaToolChain (catena di strumenti per codice sorgente java)
Una serie di strumenti  per permettere il building(le impostazioni di debug o rilascio) da codice sorgente provenienti da java (from Java source).

 SourceSet
Un SourceSet(impostazioni di sorgente) rappresenta un gruppo logico java di sorgenti(code) e  resources.

 SourceSetOutput (directory di output)
Una raccolta di tutte le directory di output (classi compilate, le risorse processate, ecc) – si noti che SourceSetOutput estende FileCollection.

 IncrementalTaskInputs (compiti incrementli)
Consente di accedere a tutti i file di input che devono essere trattati da un compito incrementale.

Configuration (Configurazione)
unaConfigurazione rappresenta un gruppo di elaborati con  le loro dipendenze. Trova maggiori informazioni sulla configurazione della dichiarazione di dipendenze o sulla gestione delle configurazioni nei documenti per ConfigurationContainer.            

 ResolutionStrategy
Definisce le strategie intorno alla risoluzione delle dipendenze. Ad esempio, costringendo d utilizzare certe versioni di dipendenza, le sostituzioni, la risoluzione dei conflitti o il timeout snapshot.

ArtifactResolutionQuery
Un costruttore  per definire una query in grado di risolvere specifici componenti provenienti da  elaborati software selezionati.

ComponentSelection
Rappresenta una tupla di  componenti selettori,  dentro un modulo e di una versione candidata , da essere valutare in una regola di selezione di componenti.

 ComponentSelectionRules
Rappresenta un contenitore per regole di selezione dei componenti. Le regole possono essere applicate come parte della resolutionStrategy di una configurazione e i singoli componenti possono essere espressamente accettati  o respinti dalla regola. I componenti che non sono stati né accettati né respinti saranno soggetti alle strategie di versione di default corrispondenti.

 ConventionProperty
ConventionProperty può essere assegnata ma non può essere mutata(anche se l’oggetto è mutevole!)

 ExtensionAware
Gli oggetti che possono essere estesi a runtime con altri oggetti.

 ExtraPropertiesExtension
Aggiuntivo, ad-hoc, proprietà per gli oggetti del dominio Gradle.

 PublishingExtension
La configurazione di come “pubblicare” rilasciare i diversi componenti di un progetto.

 Report (Rapporto)
Un rapporto basato su file da creare.

 Reporting (Segnalazioni)
Un oggetto che fornisce opzioni di reporting.

 ReportContainer
Un contenitore di oggetti tipo report, che rappresentano potenziali rapporti(reports).

 ReportingExtension
Un’estensione di progetto chiamato “report”, che fornisce le impostazioni di segnalazione (reporting) di base e le utility.

 IvyPublication
Un IvyPublication è la rappresentazione / configurazione di  come Gradle dovrebbe pubblicare qualcosa in formato Ivy, al interno di un repository Ivy. Aggiungendo  direttamente una chiamata Ivy alla pubblicazione (publishing). il contenitore di Publications del progetto fornirà  IvyPublication come tipo.

 IvyArtifact
Un artefatto(elaborato)  pubblicato come parte di una IvyPublication.

 IvyArtifactSet
Una collezione di IvyArtifacts da includere in una IvyPublication. Essendo un DomainObjectSet, una IvyArtifactSet fornisce metodi utili per l’interrogazione, il filtraggio, e la applicazione di azioni specifiche al set (insieme) di IvyArtifacts.

 IvyModuleDescriptorSpec
Il descrittore di qualsiasi pubblicazione Ivy.

 MavenPublication
Un MavenPublication è la rappresentazione / configurazione di come Gradle dovrebbe pubblicare qualcosa in formato Maven. Si aggiunge direttamente un il nome Maven alla pubblicazione (publishing). il contenitore di Publication del progetto fornirà MavenPublication come tipo.

 MavenArtifact
Un artefatto(elaborato)  pubblicato come parte di una MavenPublication(rilascio).

 MavenArtifactSet
Una collezione di MavenArtifacts da includere in una MavenPublication. Essendo un DomainObjectSet, un aMavenArtifactSet fornisce metodi utili per l’interrogazione, il filtraggio, e applicazione di  azioni specifiche al set (insieme) di MavenArtifacts.

 MavenPom
Il POM per una pubblicazione Maven. Il metodo MavenPom.withXml () può essere utilizzato per modificare il descrittore dopo che è stato generato in base ai dati di pubblicazione.

 PluginDependenciesSpec
Il DSL per dichiarare i plugin da utilizzare all’interno  uno script.

 PluginDependencySpec
Una specifica mutabile di una dipendenza all’interno di un plugin.

 ResourceHandler (gestore delle risorse)
Fornisce l’accesso ai metodi  di utilità di specifiche risorse, per esempio i metodi di fabbrica che creano svariate  risorse.

 TextResourceFactory (costruttore)
Crea TextResources garantite da fonti come le stringhe, file e le voci di archivio.

 TIPI DI CONTAINER
Tipi di container che gestiscono i vari elementi dichiarativi (ad esempio le dipendenze, le configurazioni, i manufatti, etc.):

 ConfigurationContainer
Un ConfigurationContainer è responsabile delle dichiarazioni e della gestione delle configurazioni(.(impostazioni di configurazione). Vedere anche Configurazione

RepositoryHandler
Un RepositoryHandler gestisce una serie di repository, consentendo ad essi (repository ) di essere  da definiti (impostati) e di essere filtrati (interrogati attraverso filtri e query).

DependencyHandler
Un DependencyHandler consente di dichiarare le dipendenze. Le dipendenze sono raggruppate i in configurazioni (vedere Configurazione).

ArtifactHandler
Questa classe serve a definire artefatti (elaborati – documenti) da pubblicare e aggiungerli alle configurazioni. La creazione di artefatti di pubblicazione (rilascio) non significa dovere creare un archivio. Ciò che si crea è un oggetto di dominio che rappresenta un file da pubblicare insieme e contiene informazioni  su come dovrebbe essere pubblicato (ad esempio, il nome).

FONTE VIDEO (youtube Gladeware)