什么是在java代码中执行.jar的最佳方法

时间:2014-10-14 16:58:52

标签: java classloader dynamic-class-loaders

我需要开发一个"发射器"对于Java应用程序。该发射器需要能够:

  1. 检查主要申请是否是最新的;
  2. 如果没有,请下载更新;
  3. 运行此应用程序并自行终止。
  4. 这样的事情:

    public final class Launcher {
      public static void main(String[] args) throws Exception {
        String jarName = args[0];
    
        if (jarHasUpdate(jarName)
          refreshJar(jarName);
    
        executeJar(jarName);
      }
    }
    

    有什么更好的方法来开发第3步?

    我尝试了两种截然不同的方式:

    1-运行另一个Java实例

    使用代码:

    Runtime.getRuntime().exec("java -jar mainApp.jar");
    

    问题:启动程序仍在运行,直到mainApp完成。

    2-使用ClassLoader在运行时加载.jar

    像这样:

    public final class Launcher {
        @SuppressWarnings({ "unchecked", "rawtypes" })
        public static void main(String[] args) throws Exception {
            if (args.length < 2) {
                System.out.println("Invalid number of arguments.");
                System.exit(1);
        }
    
        Refresh.refreshFile(args[0]);
    
        // args[0] .jar name
        // args[1] class with main function
        File file = new File(args[0]);
    
        try (URLClassLoader cl = new URLClassLoader(new URL[] { file.toURI().toURL() });) {
            Class cls = cl.loadClass(args[1]);
            Method method = cls.getDeclaredMethod("main", new Class[] { String[].class });
            Object params = new String[] {};
            method.invoke(cls, params);
            }
        }
    }
    

    问题:如果&#34; mainApp.jar&#34;有依赖关系,这是没有加载的。

0 个答案:

没有答案