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

标签 java deployment appdata

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

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

最佳答案

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

根据您的需要,您可能需要一个桥接接口(interface)(存在于两个 Jar 中),您可以从“exe”中调用它来运行第二个 Jar...或者您可以简单地使用第二个 Jar 的 main 方法 ;)

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

更新

为了物理分离应用程序的两个元素。您有一个包裹在 EXE(又名启动器)中的 Jar 和另一个 Jar,它是您的应用程序(又名应用程序)(我假设)。

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

有些方法,我们需要从启动器动态加载应用程序。为此,我们需要一些东西。

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

动态类加载

这可以简单地通过使用 URLClassLoader

来实现
URLClassLoader loader = new URLClassLoader(new URL[]{new File("path/to/your/jar/Application.jar").toURI().toURL()});

应用加载

这可以通过以下两种方式之一实现。您可以简单地使用 URLClassLoader 找到启动应用程序的 main 类...

// 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[]{});

现在,如果您的应用程序 Jar 没有 main 方法,您可以使用上面的示例启动任何您想要的类...

关于java - 如何从另一个 jar 运行一个 jar 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12520395/

相关文章:

postgresql - 自动化 postgresql 数据迁移,最好是 fabric 任务

docker - 如何在openshift中部署apache服务器?

java - 如何为依赖项注册SourceSets的输出

java - Spring boot AOP Aspect 未被调用

java - 在每个第 n 个字符处拆分一个字符串

command-prompt - 命令提示符下的del命令

java - 如何为 Applet 签名 Jar 文件?

Java - MVC 模式 - 绘制和克服空指针异常

ruby-on-rails-3 - 有没有办法删除 heroku 上的一个分支

.net - Visual Basic 如何到达 %appdata%