导出时,从另一个Jar运行Jar不起作用

时间:2014-12-04 02:26:56

标签: java jar

我几个小时以来一直在读这个主题:

我想做的(并且成功)是从我的代码运行一个可运行的jar,事实是,当我将代码导出到一个可运行的jar中时,它就会停止工作。

从我的编译器开始工作的方法是:

ProcessBuilder pb = new ProcessBuilder("java", "-jar", "JAR I'M LOADING");
pb.start

这是我尝试过的:

我已经创建了一个包含我想要运行的jar的数据包,并且我创建了一个静态JarLoader类:

public class JarLoader {

    static JarLoader jl = new JarLoader();

    public static ProcessBuilder loadJar(){
        return new  ProcessBuilder("java", "-jar", jl.getClass().getResource("JAR I'M TRYING TO LOAD").toString());

}

当然,我将运行jar的方法切换为:

ProcessBuilder pb = JarLoader.loadJar();
pb.start();

这种技术非常适用于其他类型的资源,例如图像,但它不适用于jar。

我错过了什么吗? (是的,我确实将包含Jar和JarLoader的文件夹添加到项目的源代码中)

1 个答案:

答案 0 :(得分:1)

您当前使用的技术允许您访问已在JAR文件中打包的资源。但是这些资源只在应用程序中是连贯的,而不是来自外部。

当您使用java -jar ...执行JAR文件时,这是一个正在执行的外部应用程序,它不会理解如何从另一个JAR中检索JAR。您需要将其临时写入磁盘,然后运行临时JAR文件。

你需要:

  1. 以流形式打开资源。
  2. 使用Files.createTempFile()在某处创建临时JAR文件。
  3. 使用Files.copy()从资源流复制到临时文件。
  4. 使用File.deleteOnExit()确保在主(主机)应用程序终止时清除临时文件。
  5. 使用java -jar tempfile.jar或您调用的任何内容执行临时文件。