Ninja is a full stack web framework for Java. Stork is an "after-build" tool for Java. Lately, I run all webapps in a stand-alone process (embed Jetty/Netty/etc) and use a reverse proxy (Nginx) to send requests to it. While Ninja is easy to package as a war file that's ready to run in Tomcat/Jboss/etc, it's not as easy to package it as a stand-alone app that can run as a daemon/service. Ninja + Stork to the rescue! Stork integrates with Ninja in just 2 easy steps.
A full demo is available @ https://github.com/fizzed/java-ninja-stork-demo
Step 1: Add Stork Maven Plugin
Stork's maven plugin provides two separate goals. The generate
goal binds to the compile phase and compiles any files in src/main/launchers
to target/stork
. The assembly
goal binds to the package phase and creates a tarball of everything -- including the launchers, jars, and resources required to start your Ninja app.
Add the following to your pom.xml
:
.... <build> <plugins> <plugin> <groupId>com.fizzed</groupId> <artifactId>fizzed-stork-maven-plugin</artifactId> <version>1.2.2</version> <executions> <execution> <id>generate-stork-launchers</id> <goals> <goal>generate</goal> </goals> </execution> <execution> <id>generate-stork-assembly</id> <goals> <goal>assembly</goal> </goals> </execution> </executions> </plugin> </plugins> </build> ....
Step 2: Create Launcher Config File
Stork's maven plugin compiles any files in src/main/launchers
to target/stork
during the compile phase. Let's say you have an app named "ninja-stork-demo". Create a src/main/launchers
directory and add a file named ninja-stork-demo.yml
with the following content:
name: "ninja-stork-demo" domain: "com.fizzed" display_name: "ninja-stork-demo" short_description: "Ninja Stork Demo Webapp" type: DAEMON main_class: "ninja.standalone.NinjaJetty" platforms: [ WINDOWS, LINUX, MAC_OSX ]
Compile, Package, Run, Deploy
To verify your launcher config will compile run the following in your terminal:
mvn compile
To assemble your storkified tarball run the following in your terminal:
mvn package
Once maven finishes then target/stork
will contain a fully prepared directory with start/stop/run scripts that are ready to run across any platform. Here is what your target/stork
directory will look like:
target/stork/bin target/stork/bin/ninja-stork-demo64.exe target/stork/bin/ninja-stork-demo32.ini target/stork/bin/ninja-stork-demo32.exe target/stork/bin/ninja-stork-demo.bat target/stork/bin/ninja-stork-demo64.ini target/stork/bin/ninja-stork-demo target/stork/lib target/stork/lib/(all jars from project including project artifact jar) target/stork/share target/stork/share/init.d target/stork/share/init.d/ninja-stork-demo.init target/stork/share/osx target/stork/share/osx/com.fizzed.ninja-stork-demo.plist
To quickly try out your Ninja app on Linux/OSX/UNIX (no need to change dirs):
target/stork/bin/ninja-stork-demo --run
To quickly try out your Ninja app on Windows (no need to change dirs):
target/stork/bin/ninja-stork-demo.bat --run
The target/
directory will also contain a ninja-stork-demo-1.0.0.tar.gz
tarball ready to copy to another server. The tarball contains all the necessary scripts to run as a rock-solid, reliable daemon across Windows, Linux, Mac OSX, and many other UNIX platforms.
Since the tarball uses a canonical layout for a Java app, you may also find the stork-fabric-deploy
script useful in doing a super efficient deploy to staging/production servers. For more info, you'll want to check out the example app or the Stork Github repository.