
OSGI-OPT.src.org.kohsuke.args4j.Starter Maven / Gradle / Ivy
The newest version!
package org.kohsuke.args4j;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* Starter class which uses reflection to instantiate the business
* class, parse the command line parameters, sets the fields of the
* business class and doing the help message handling.
*
* @author Jan Materne
*/
public class Starter {
/**
* The name of the JavaVM property which stores the class name of
* the business class.
* {@value}
*/
public static final String PARAMETER_NAME = "mainclass";
public static void main(String[] args) {
String classname = System.getProperty(PARAMETER_NAME);
CmdLineParser parser = null;
boolean classHasArgument = false;
boolean classHasOptions = false;
// Check the requirement: must specify the class to start
if (classname == null || "".equals(classname)) {
System.err.println("The system property '"
+ PARAMETER_NAME
+ "' must contain the classname to start.");
System.exit(-1);
}
try {
Class clazz = Class.forName(classname);
Object bean = clazz.newInstance();
parser = new CmdLineParser(bean);
// for help output
classHasArgument = hasAnnotation(clazz, Argument.class);
classHasOptions = hasAnnotation(clazz, Option.class);
parser.parseArgument(args);
// try starting run()
Method m;
boolean couldInvoke = false;
try {
m = clazz.getMethod("run", (Class[]) null);
m.invoke(bean, (Object[]) null);
couldInvoke = true;
} catch (SecurityException e) {
} catch (IllegalArgumentException e) {
} catch (NoSuchMethodException e) {
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {
}
// try starting run(String[])
if (!couldInvoke) try {
m = clazz.getMethod("run", String[].class);
m.invoke(bean, new Object[]{args});
couldInvoke = true;
} catch (SecurityException e) {
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {
}
} catch (ClassNotFoundException e) {
// wrong classpath setting
System.err.println("Cant find the class '"
+ classname
+ "' as specified in the system property '"
+ PARAMETER_NAME + "'.");
} catch (CmdLineException e) {
// wrong argument enteres, so print the usage message as
// supplied by args4j
System.err.println(e.getMessage());
System.err.print(classname);
if (classHasOptions) System.err.print(" [options]");
if (classHasArgument) System.err.print(" arguments");
System.err.println();
if (parser != null)
parser.printUsage(System.err);
} catch (Exception e) {
// Must be an unhandled business exception, so we can only
// print stacktraces.
e.printStackTrace();
}
}
public static boolean hasAnnotation(Class clazz, Class extends Annotation> annotation) {
if (clazz.getAnnotation(annotation)!=null) return true;
for (Field f : clazz.getFields()) {
if (f.getAnnotation(annotation)!=null) return true;
}
for (Method m : clazz.getMethods()) {
if (m.getAnnotation(annotation)!=null) return true;
}
return false;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy