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)