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
Installation
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
Nenhum comentário:
Postar um comentário