从另一个罐子中运行一个罐子 - java

为了清楚起见,请在我悬赏之前重写一下:

我想做的是为已经以(可执行)jar形式制作的程序制作一个引导加载程序。该引导程序在运行时将具有三个简单的目标:

将目标程序的本地xml文件与服务器上托管的本地xml文件进行比较(以确保它们是相同版本)
如果它们不是同一版本,并且在线版本是较新的,则下载较新的版本。
重新编写xml文件以反映此更改。
执行第二个jar文件(就像启动可执行文件一样启动它)。

我遇到的问题与第4步有关。尽管查看了UrlClassLoader和其他库,但我仍在努力寻找一种从我的引导程序中启动jar的可靠方法。

由于某些外部问题,在这种情况下,不能选择JNLP / Web-start。

TL; DR:我需要找到一种从jar中下载/启动jar的方法,以便在运行引导程序时更新程序。

谢谢!

参考方案

Runtime.getRuntime()。exec()

如果您的MyApp.jar将有任何输出,则这里会有一些陷阱。

检查文档以获取有关如何正确使用执行程序的详细信息。

http://docs.oracle.com/javase/6/docs/api/java/lang/Process.html

并查看这篇关于一些陷阱的帖子...

Java Runtime.exec()

Java:javaagent无法访问tools.jar - java

我正在开发一个Java代理,它通过tools.jar之类的反射使用com.sun.tools.javac.util.Options中的某些类。为了测试我的代理,我要设置set JAVA_TOOL_OPTIONS=-javaagent:path-to-my-agent-jar并在将Java代理挂接到的简单gradle项目上启动构建。我已将tools.jar添加…

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java:BigInteger,如何通过OutputStream编写它 - java

我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…

Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…