Faire une lib en Golo pour Java
Je vais vous expliquer comment créer une librairie en Golo re-utilisable ensuite avec vos autres projets Golo, ou Java.
Nous allons crĂ©er une librairie qui nous aide Ă utiliser les emojis dans nos applications đ
- Rappel: Golo, le site, câest par lĂ http://golo-lang.org/
Créer une librairie avec Golo
Je pars du principe que vous avez installé Golo. Dans un terminal, tapez ceci:
golo new emoji --type maven
Golo va vous gĂ©nĂ©rer le squelette dâun projet Maven et vous allez obtenir cette arborescence:
.
âââ emoji
âââ LICENSE
âââ README.md
âââ pom.xml
âââ src
âââ main
âââ golo
âââ main.golo
Allez dans main.golo
et modifiez le code:
module org.typeunsafe.emoji
function panda_face = -> "đŒ"
function alien = -> "đœ"
function rabbit = -> "đ°"
Build
Avant de builder notre librairie il faut aller modifier le fichier pom.xml
:
Changer mainClass
Dans votre pom.xml
vous avez 2 <mainClass>emoji</mainClass>
, il faut les remplacer par :
<mainClass>org.typeunsafe.emoji</mainClass>
- Remarque: juste avant je vous ai fait modifier le nom du module Golo qui est en fait une classe Java
Changez le numero de version de Golo si nécessaire
Et remplacez, si besoin (tout dépend de la version de Golo utilisée):
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<golo.version>3.2.0-SNAPSHOT</golo.version>
</properties>
par
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<golo.version>3.2.0-M5</golo.version>
</properties>
- Remarque 1:
3.2.0-M5
est la release courante de Golo - Remarque 2: si vous avez une version snapshot (vous travaillez avec la version de dev), vous pouvez rencontrer des problÚmes de gestion de dépendances au moment du build.
Fixez un âbugâ đ du pom
Allez vérifier si les sections repositories
et pluginRepositories
existent et si ce nâest pas le cas ajoutez les:
<repositories>
<repository>
<id>bintray</id>
<name>Bintray</name>
<url>https://jcenter.bintray.com</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>bintray</id>
<name>Bintray</name>
<url>https://jcenter.bintray.com</url>
</pluginRepository>
</pluginRepositories>
- Remarque 1: ce sera fixé dans la prochaine release
- Remarque 2: câest fixĂ© dans la version de dĂ©veloppement đ
Buildez âïž
Il suffit dâutiliser la commande:
mvn package
et maintenant vous obtenez votre librairie au format jar
:
/target/emoji-0.0.1-SNAPSHOT-jar-with-dependencies.jar
Utiliser notre nouvelle librairie avec Golo
Préalable
Pour pouvoir lâutiliser dans vos autres projet, il va falloir installer votre librairie dans votre maven local avec la commande mvn install:install-file
:
mvn install:install-file -Dfile=./target/emoji-0.0.1-SNAPSHOT-jar-with-dependencies.jar -DgroupId=org.typeunsafe -DartifactId=emoji -Dversion=0.0.1-SNAPSHOT -Dpackaging=jar -DgeneratePom=true
Utiliser la librairie dans un projet Golo
- Créez un nouveau fichier Golo:
golo new golo.uses.emoji --type maven
- modifiez le numero de version de Golo dans le fichier
pom.xml
- ajoutez les sections
<repositories>
et<pluginRepositories>
-
ajouter la dépendance à votre librairie:
<dependency> <groupId>org.typeunsafe</groupId> <artifactId>emoji</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
Modifier le code de src/main/golo/main.golo
module golo.uses.emoji
import org.typeunsafe.emoji
function main = |args| {
println(panda_face())
println(alien())
println(rabbit())
}
Buildez / Lancez
mvn package
mvn exec:java
đŒ
đœ
đ°
Et pour utiliser avec Java?
Utiliser la librairie dans un projet Java
Alors je me suis créé un petit projet Java:
.
âââ pom.xml
âââ src
â  âââ app
â  âââ Application.java
avec ce pom.xml
(â ïž je ne suis pas un spĂ©cialiste Maven):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.typeunsafe</groupId>
<artifactId>myapp</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.2</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>app.Application</mainClass>
</manifest>
</archive>
<appendAssemblyId>false</appendAssemblyId>
<outputDirectory>./</outputDirectory>
<finalName>${project.artifactId}</finalName>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.typeunsafe</groupId>
<artifactId>emoji</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
â ïž: on nâoublie surtout pas la dĂ©pendance Ă notre librairie:
<dependency>
<groupId>org.typeunsafe</groupId>
<artifactId>emoji</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
Le code Java:
En Golo un module (compilé) correspond à une classe Java avec des méthodes statiques qui sont les fonctions. Donc, nous faisons référence à notre librairie comme ceci import static org.typeunsafe.emoji.*;
et notre code va ressembler Ă ceci:
package app;
import static org.typeunsafe.emoji.*;
public class Application {
public static void main(String[] args) {
System.out.println(panda_face());
System.out.println(alien());
System.out.println(rabbit());
}
}
Buildez / Lancez
mvn compile assembly:single
java -jar myapp.jar
đŒ
đœ
đ°
Et voilĂ , vu les possibilitĂ©s de Golo en termes de Promises, Workers, etc ,,, Vous pouvez apporter une touche âDynamiqueâ Ă vos projets Java trĂšs simplement. đŒ
Vous pouvez trouver les exemples de code ici:
- https://github.com/TypeUnsafe/emoji
- https://github.com/TypeUnsafe/golo.uses.emoji
- https://github.com/TypeUnsafe/java.uses.emoji