Ответ 1
Не должно быть сложнее вызова любой другой функции:
public static void main(String[] args) throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
Class<?> cls = Class.forName("pkg1.pkg2.classname");
Method meth = cls.getMethod("main", String[].class);
String[] params = null; // init params accordingly
meth.invoke(null, (Object) params); // static method doesn't have an instance
}
Но на самом деле я не вижу в этом многих применений, единственное, что вы покупаете, это то, что вы можете скомпилировать программу, не связывая другую, если вы никогда не используете этот конкретный путь кода, но если это вам нужно, здесь мы идем;)