Compiler Astyanax, le client Cassandra en Java de Netflix

C’est le client que j’utilise pour communiquer avec Cassandra. Il est assez simple, fiable, et le développement est actif. Il est utilisé par Netflix, le site américain de VOD.

Publié le

Les opérations sont assez simples, mais ce n’est pas évident la première fois, surtout quand il n’y a pas de binaires officiels.

Je suis sur OSX, mais il ne doit pas y avoir beaucoup de différences avec Linux (ni avec Windows et un vrai shell).

Vous avez besoin d’une VM Java (1.6 ou plus), et de git.

Assurez vous que votre version de Cassandra soit bien gérée par Astyanax. C’est écrit dans le wiki.

Récupérez le source via Github :

$ git clone git@github.com:Netflix/astyanax.git

Puis

cd astyanax
./gradlew build -x test

Pour le compiler sans faire les tests : il a besoin d’une connexion avec Cassandra, et j’ai souvent des problèmes avec cela.

Il va télécharger toutes les dépendances et tout compiler. Il y en a un bon paquet : le laisser faire et attendre.

Au « BUILD SUCCESSFUL », ouvrir le fichier build.gradle dans un éditeur de texte.

Cherchez toutes les lignes qui commencent par compile avec un package java derrière, par exemple :

compile "joda-time:joda-time:$jodaTimeVersion"
compile "com.github.stephenc.high-scale-lib:high-scale-lib:$highScaleLibVersion"
compile "com.google.guava:guava:$guavaVersion"
[...]

Ce sont toutes les dépendances qui ont été compilées (soit maintenant, soit plus tôt si une application qui utilise gradle en a eu besoin). Les compile project sont les jar d’Astyanax : c’est ceux que l’on cherchait au départ à récupérer.

Pour récupérer les jar de dépendance, aller dans

$ cd ~/.gradle/

puis faites un

$ find . -type f | grep ".jar" | grep LeNomDuPackage

Avec LeNomDuPackage tel que

$ find . -type f | grep ".jar" | grep com.github.stephenc.high-scale-lib
./caches/artifacts-14/filestore/com.github.stephenc.high-scale-lib/high-scale-lib/1.1.2/jar/e3fbb2a95269eb8049bc72a3b0ce3208378a30f5/high-scale-lib-1.1.2.jar
$ find . -type f | grep ".jar" | grep joda-time
./caches/artifacts-14/filestore/joda-time/joda-time/1.6.2/jar/7a0525fe460ef5b99ea3152e6d2c0e4f24f04c51/joda-time-1.6.2.jar
$ find . -type f | grep ".jar" | grep com.eaio.uuid
./caches/artifacts-14/filestore/com.eaio.uuid/uuid/3.2/jar/77ba5105d949cd589aff75400d9f7d3676691a46/uuid-3.2.jar
[...]

C’est très rébarbatif. Vous pouvez toujours créer un script pour cela. Pour ma part, je fait une recherche avec tous les éléments les plus récents de ce dossier (qui dit récent, dit vient juste d’être compilé).

Copiez tous ces fichiers jar dans un coin (quand la recherche en remonte plusieurs, prendre le plus récent).

Ajoutez-y les fichiers jar des dossiers astyanax-*/build/libs. Vous y trouverez les sources, les javadocs et les binaires. Un jar de chaque.

Et voila, tout ceci représente les binaires d’Astyanax et ses dépendances. A rajouter dans votre projet et votre classpath !