quinta-feira, 17 de setembro de 2020

Using jbang for ETL Scripts

As a Java programmer I prefer to use good old Java to extract/transform/load data to make it usable in tools I work for data visualization. However, it is a burden having to use maven just to write a single Java file. Hopefully there's a new tool called jbang that makes it easier to do scripting in Java.

More than simple scripts

What is impressive about jbang is that you are not restricted to standard Java APIs in fact you can use any library you want coming from Maven! What you will miss is the burden of having to deal with pom.xml and maven builds. Dependencies are simply declared in the Java file itself using a "DEPS" comment, for example:

//DEPS org.slf4j:slf4j-nop:1.7.25


To install jbang you just have to check the best way for you in downloads page.  In my case I have sdkman, so it was just a matter of running:

$ sdk install jbang

Hello World

The simplest hello world we can thing can run with jbang without any additional configuration, just install jbang and you should be able to run java files. So let's say I have a hello.java just like this

I can run it using: jbang hello.java. With an additional comment at the begging of the file I can make the file work as an executable file. Add the comment as the file first line (linux environments) and make the file executable:

///usr/bin/env jbang "$0" "$@" ; exit $? 

chmod +x hello.java

Then you should be able to run using ./hello.java. This comment can be added to existing files, but if you are starting a new script with jbang just use: $ jbang init hello.java

Real world script with external dependencies

In real world you will need external dependencies. I had a Java file I use to process some CSV files, it is in a maven project and this version can be seen here. To run it with jbang here' what I did:

  • Went to the Java file and added these comments to the beginning:

//usr/bin/env jbang "$0" "$@" ; exit $?

//DEPS org.apache.commons:commons-csv:1.8

//JAVA 11

And that should be it... But for my project I did two additional steps:

  • Got rid of Maven stuff
  • Removed package declaration
My ETL folder is clear now and I can use Java and have contributions from others because they only need to have jbang installed to run my Java file. 

Development is easier, you will not lose content assist or IDE goodies with jbang. For example, I can edit a Java file in vscode by just using: code `jbang edit myfile.java`

Learning more

This is not all, specially with JavaFX, where all the setup is done by jbang! If you want to learn more I recommend you to check jbang examples and  this talk from  jbang father Max Andersen:

Nenhum comentário:

Postar um comentário