Search code examples
javajvmstatic-initialization

Invoke java class static initialization via VM option


Is there any way to force static initialization of some class B before entering the main() method of class A, without changing class A, using only VM options?


Solution

  • you could create a class that initializes other classes and then calls the real main method, e.g:

    public static void main(String[] args) throws Exception {
        Class<?> 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 });
    }
    

    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.