Proficiency in Groovy/Grails

Spread the love

Vari modi di creare una nuova applicazione Grails:

  • Da IDE: io uso Intellij Ultimate di JetBrains, provenendo dalla programmazione PHP (JetBrains è il produttore di PHPStorm).
  • Dal sito di Grails: https://start.grails.org
  • Da linea di comando

Creazione da IDE

Ho sperimentato per prima la prima modalità, creando l’applicazione Test1:

Imposto la versione di Grails e le generalità dell’applicazione

Per questa applicazione uso Java 1.8 come JVM e Grails 2.3.11 per allinearmi con le versioni utilizzate dal Cliente. Alla fine mi viene chiesto il nome dell’applicazione:

Parte il build dell’applicazione utilizzando la versione di Grails 2.3.1 selezionata:

/usr/lib/jvm/jdk1.8.0_111/bin/java -Dgrails.home=/home/marcob/.sdkman/candidates/grails/2.3.11 -Dtools.jar=/usr/lib/jvm/jdk1.8.0_111/lib/tools.jar -Dgroovy.starter.conf=/home/marcob/.sdkman/candidates/grails/2.3.11/conf/groovy-starter.conf -Dbase.dir=/home/marcob/IdeaProjects/Test1 -Dfile.encoding=UTF-8 -classpath /home/marcob/.sdkman/candidates/grails/2.3.11/lib/org.codehaus.groovy/groovy-all/jars/groovy-all-2.1.9.jar:/home/marcob/.sdkman/candidates/grails/2.3.11/dist/grails-bootstrap-2.3.11.jar org.codehaus.groovy.grails.cli.support.GrailsStarter --main org.codehaus.groovy.grails.cli.GrailsScriptRunner --conf /home/marcob/.sdkman/candidates/grails/2.3.11/conf/groovy-starter.conf "idea-print-project-settings -plain-output"

 |Loading Grails 2.3.11
 |Configuring classpath
 .
 |Environment set to development
 ....
 |Installing zip scaffolding-2.0.3.zip…
 ...
 |Installed plugin scaffolding-2.0.3
 ..........

---=== IDEA Grails build settings ===---
 #
 Tue Aug 13 12:12:01 CEST 2019
 grails.work.dir=/home/marcob/.grails/2.3.11
 grails.project.work.dir=target/work
....

Compile.0=/home/marcob/.sdkman/candidates/grails/2.3.11/lib/org.codehaus.groovy/groovy-all/jars/groovy-all-2.1.9.jar
 Compile.1=/home/marcob/.sdkman/candidates/grails/2.3.11/dist/grails-plugin-rest-2.3.11.jar
....

Runtime.0=/home/marcob/.sdkman/candidates/grails/2.3.11/lib/org.codehaus.groovy/groovy-all/jars/groovy-all-2.1.9.jar
 Runtime.1=/home/marcob/.sdkman/candidates/grails/2.3.11/dist/grails-plugin-rest-2.3.11.jar
....

Test.0=/home/marcob/.sdkman/candidates/grails/2.3.11/lib/javax.servlet/javax.servlet-api/jars/javax.servlet-api-3.0.1.jar
 Test.1=/home/marcob/.sdkman/candidates/grails/2.3.11/lib/org.codehaus.groovy/groovy-all/jars/groovy-all-2.1.9.jar
....

Provided.0=/home/marcob/.sdkman/candidates/grails/2.3.11/lib/javax.servlet/javax.servlet-api/jars/javax.servlet-api-3.0.1.jar
 Build.0=/home/marcob/.sdkman/candidates/grails/2.3.11/lib/xalan/serializer/jars/serializer-2.7.1.jar
 Build.1=/home/marcob/.sdkman/candidates/grails/2.3.11/dist/grails-bootstrap-2.3.11.jar
....

---=== End IDEA Grails build settings ===---

Ometto per comodità la maggior parte del log che non presenta messaggi d’errore.

Alla fine l’applicazione è creata e viene popolato l’albero dei file all’interno della directory

~/IdeaProjects/Test1

Creazione dal sito di Grails

Si accede a https://start.grails.org

Semplicemente si seleziona il tipo di progetto: Applicazione o plugin: la stessa possibilità c’è nella IDE ma per iniziare partiamo dalle Applicazioni;

Si sceglie il nome dell’applicazione e la versione di Grails: purtropppo le versioni selezionabili non sono vecchie come quelle che usa il mio Cliente quindi scelgo la 3.2.13 (che ho anche a bordo della mia macchina):

marcob@jsbach[12:32:28]:IdeaProjects$ sdk list grails
 Available Grails Versions
 4.0.0               3.1.15              3.0.2               2.2.2          
  4.0.0.RC2           3.1.14              3.0.1               2.2.1          
  4.0.0.RC1           3.1.13              3.0.0               2.2.0          
  4.0.0.M2            3.1.12              2.5.6             * 2.1.5          
  4.0.0.M1            3.1.11              2.5.5               2.1.4          
  3.3.10              3.1.10              2.5.4               2.1.3          
  3.3.9               3.1.9               2.5.3               2.1.2          
  3.3.8               3.1.8               2.5.2               2.1.1          
  3.3.7               3.1.7               2.5.1               2.1.0          
  3.3.6               3.1.6               2.5.0               2.0.4          
  3.3.5               3.1.5               2.4.5               2.0.3          
  3.3.4               3.1.4               2.4.4               2.0.2          
  3.3.3               3.1.3               2.4.3               2.0.1          
  3.3.2               3.1.2               2.4.2               2.0.0          
  3.3.1               3.1.1               2.4.1               1.3.9          
  3.3.0               3.1.0               2.4.0               1.3.8           
>*3.2.13              3.0.17            * 2.3.11              1.3.7          
  3.2.12              3.0.16              2.3.10              1.3.6          
  3.2.11              3.0.15              2.3.9               1.3.5          
  3.2.10              3.0.14              2.3.8               1.3.4          
  3.2.9               3.0.13              2.3.7               1.3.3          
  3.2.8               3.0.12              2.3.6               1.3.2          
  3.2.7               3.0.11              2.3.5               1.3.1          
  3.2.6               3.0.10              2.3.4               1.3.0          
  3.2.5               3.0.9               2.3.3               1.2.5          
  3.2.4               3.0.8               2.3.2               1.2.4          
  3.2.3               3.0.7               2.3.1               1.2.3          
  3.2.2               3.0.6               2.3.0               1.2.2          
  3.2.1               3.0.5               2.2.5               1.2.1          
  3.2.0               3.0.4               2.2.4               1.2.0          
  3.1.16              3.0.3             * 2.2.3                                  =======================================================================
 - local version
 - installed 
   - currently in use 

Come si vede, ho installato le versioni 2.1.5, 2.2.3, 2.3.11, 3.2.13 e quest’ultima è quella preselezionata nella sessione di shell in cui ho lanciato il comando

Tra le features, lascio le scelte standard: Hibernate5 in particolare è lo strato software che permette di astrarre dal livello database (ORM, Object Relationship Mapping).

Premendo il pulsante Generate viene scaricato il package myapp.zip:

Lo scarico e unzippo dentro a ~/IdeaProjects/Test1. Dopo di che lo apro con la IDE e questa si deve riscaricare tutti i package dipendenti, ad esempio Gradle (che è il tool per fare il build della applicazione che manca nel file zip)

Download https://services.gradle.org/distributions/gradle-3.4.1-bin.zip (70,31 MB)
 Download https://services.gradle.org/distributions/gradle-3.4.1-bin.zip finished succeeded, took 57 s 539 ms
 Gradle Daemon started in 840 ms
 Download https://repo.grails.org/grails/core/org/grails/grails-gradle-plugin/3.2.13/grails-gradle-plugin-3.2.13.pom
...

Creazione da linea di comando

L’ultimo modo per creare l’applicazione è da linea di comando. Essa assomiglia molto alla modalità php artisan per creare le applicazioni in PHP/Laravel:

Build and Go!

Una volta terminata la fase di startup dell’applicazione è il momento di programmare e costruire l’applicazione vera e propria. Ma a questo punto siamo già davanti ad una applicazione di base funzionante. Usiamo gradle (come php artisan) e facciamo il build aprendo un terminale da dentro la directory del progetto

marcob@jsbach[16:12:15]:myapp$ ./gradlew bootRun
 Starting a Gradle Daemon (subsequent builds will be faster)
 :compileJava NO-SOURCE
 :compileGroovy
 :buildProperties
 :processResources
 :classes
 :findMainClass
 :bootRun
 Grails application running at http://localhost:8080 in environment: development
   Building 85% > :bootRun 

Quando lo script ha raggiunto la fase “running”, puntare il browser all’indirizzo http://localhost:8080

Attenzione! c’è un comando in più da dare: prima di avviare il build, rendere eseguibile lo script gradlew:

marcob@jsbach[16:11:48]:myapp$ chmod a+x gradlew

Importazione in Intellij IDEA

Gradle Daemon started in 1 s 722 ms
 CONFIGURE SUCCESSFUL
 Total time: 10.864 secs
 Manifest.writeTo(Writer) has been deprecated and is scheduled to be removed in Gradle 4.0. Please use Manifest.writeTo(Object) instead.

Guida di stile

Indice

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.