Introduction

The Commons-launcher project provides a smart way to start a Java application. In the facts, the CommonsLauncher provides a bootstrap class which starts a ant process.

This ant process :

  • makes the needed pre execution tasks : create the needed classpath, check resources, download resources ..
  • invoke a launcher task which allows to start a java application

Example

We want to start a small Main class :

package org.apache.launcher.example;

import org.apache.commons.logging.LogFactory;

public class Main {
    public static void main(String[] args) {
    	LogFactory.getLog(Main.class).info("start");
    }
}
We will name it "our application".

Global distribution

This runtime distribution includes:

  • bin/demo.sh : the unix user script to start our small Main class
  • bin/demo.bat : the windows user script to start our small Main class
  • bin/ : contains the other files used by the script
  • etc/ : contains the configuration file (log4j configuration, ..)
  • lib/launcher-demo.jar : contains the small Main class
  • lib/ : contains the needed jar files to the application
  • lib/launcher/ : contains the needed jar files to the commons launcher

Bin Directory

User script

The demo.(sh/bat) is the bootstrap script used by the user to start the application:

  java -cp . LauncherBootstrap -executablename launcher-demo demo

Launcher ant configuration

Our launcher.xml is as simple as possible :

<project name="Demo Launcher" default="demo" basedir=".">

    <property name="base.dir" value="${basedir}/.."/>

    <property name="etc.dir" value="${base.dir}/etc"/>
    <property name="lib.dir" value="${base.dir}/lib"/>
    <property name="log.dir" value="${base.dir}/log"/>

    <path id="base.class.path">
        <pathelement path="${etc.dir}"/>
        <fileset dir="${lib.dir}" includes="*.jar"/>
    </path>

    <target name="demo">
        <mkdir dir="${log.dir}" />
        <launch classname="org.apache.launcher.example.Main">
            <classpath refid="base.class.path"/>
            <syspropertyset>
                <sysproperty key="log.dir" file="${log.dir}"/>
            </syspropertyset>
        </launch>
    </target>
</project>
It creates the needed classpath, the log directory, sets the log.dir system property for log4j and executes our Main class.

Other files

  • LauncherBootstrap.class, commons-launcher.jar : the neede classes the CommonsLauncher
  • launcher.properties : the bootstrap configuration (used to find the lib/launcher files)