 <p>you could create a class that initializes other classes and then calls the real main method, e.g:</p> <pre><code>public static void main(String[] args) throws Exception { Class&lt;?&gt; mainClass = Class.forName(System.getProperty("mainClass")); for (String className : System.getProperty("initClasses").split(";")) { Class.forName(className); } Method main = mainClass.getMethod("main", String[].class); main.invoke(null, new Object[] { args }); } </code></pre> <p>Then you would start the application with that class as the main class and specify the real main class and the classes to be initialized via properties.</p>