如何从另一个jar运行jar文件

时间:2012-09-20 20:25:42

标签: java deployment appdata

我有一个jar文件已经使用L4J转换为.exe,另一个jar文件在appdata中。拥有两个文件的原因是我需要一个更新机制。

我的问题: 如何在桌面上运行.exe文件,然后从appdata中加载jar?

2 个答案:

答案 0 :(得分:2)

您可以使用URLClassLoader在运行时加载第二个Jar。

根据您的需要,您可能需要一个桥接界面(两个存在于两个Jars中),您可以从'exe'调用以使第二个Jar运行...或者您可以简单地使用第二个Jar的{{ 1}}方法;)

您拥有的另一个选择是运行另一个JVM。

<强>更新

为了物理分离你的应用程序的两个元素。你有一个包装在EXE(也就是发射器)的Jar和另一个Jar是你的应用程序(也就是应用程序)(我假设)。

因此。你的启动器应该完全不知道你的应用程序(几乎没有编译时依赖性)。

如何,我们需要从启动器动态加载应用程序。要做到这一点,我们需要一些东西。

我们需要能够将应用程序加载到启动器类加载器上下文中(所以我们可以看到它),我们可以加载应用程序。

动态类加载

这可以通过使用main

来实现
URLClassLoader

正在加载

这可以通过两种方式之一实现。您只需使用URLClassLoader loader = new URLClassLoader(new URL[]{new File("path/to/your/jar/Application.jar").toURI().toURL()}); 查找启动应用程序URLClassLoader类...

即可
main

现在,如果您的应用程序Jar没有// This is essentially the same as saying // the.package.name.to.you.main.class.Main.main(new String[]{}); Class<?> mainClass = loader.loadClass("the.package.name.to.you.main.class.Main"); Method mainMethod = mainClass.getMethod("main", String[].class); mainMethod.invoke(null, new String[]{}); 方法,您可以使用上面的示例来启动您想要的任何类...

答案 1 :(得分:1)

你需要在to classpath中添加一个jar,例如:“c:\ mypath \ myjar.jar”,而不是你将更新myjar.jar