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
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
.... <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
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:
To assemble your storkified tarball run the following in your terminal:
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):
To quickly try out your Ninja app on Windows (no need to change dirs):
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.