提问人:mapeters 提问时间:8/27/2018 最后编辑:mapeters 更新时间:3/28/2023 访问量:516
如何在 Equinox 中通过动态捆绑包安装运行子进程?
How can I run a subprocess in Equinox with dynamic bundle installation?
问:
我有一个在 OSGi/Equinox 中运行的 Java 应用程序。从这个应用程序中,我需要生成在OSGi/Equinox中运行的Java子进程(例如通过),以便正确处理类加载。子进程将需要多个捆绑包,因此理想情况下,我想要一些相当动态的方式在子进程的 Equinox 容器中安装这些捆绑包,例如通过读取 feature.xml 文件。ProcessBuilder.start()
我已经通读了这里的程序启动,但我不明白 Equinox 如何适应它。我也考虑过做这样的事情,但它不会是动态的,特别是当子流程的入口点捆绑包需要多个其他捆绑包时,这些捆绑包需要更多的捆绑包,等等。
那么,我怎样才能生成一个子进程,以一种相当动态的方式将捆绑包加载到容器中,在OSGi/Equinox中运行呢?
注意:我需要使用单独的进程。子进程将使用使用全局变量的 JNA 本机库进行数据处理(我无法修改本机库)。因此,为了能够同时处理不同的数据,数据处理需要在单独的进程中运行。
答:
0赞
HALİL İBRAHİM KARATAŞ
3/28/2023
#1
您可以使用 Equinox Launcher API。 以下示例演示了如何使用 Equinox Launcher API 启动具有一组捆绑包的 equinox 新实例: `
EquinoxLauncher launcher = new EquinoxLauncher();
String equinoxHome = "/path/to/equinox/home";
String[] bundlePaths = { "/path/to/bundle1.jar", "/path/to/bundle2.jar" };
EquinoxRunConfiguration runConfig = launcher.newConfiguration();
runConfig.setWorkingDir(new File(equinoxHome));
runConfig.setFramework(new File(equinoxHome, "plugins/org.eclipse.osgi.jar"));
runConfig.addProgramArg("-console");
runConfig.addProgramArg("-noExit");
for (String bundlePath : bundlePaths) {
runConfig.addBundle(new File(bundlePath).toURI());
}
EquinoxRunMonitor monitor = launcher.launch(runConfig);
`
评论
feature.xml
feature.xml
EquinoxFactory.newFramework()
osgi.install.area
ProcessBuilder.start()
只会在您的系统上执行命令,例如,您需要找到一种方法在操作系统上将处理应用程序作为可执行文件或脚本启动。由于这将是一个全新的过程,因此调用程序是OSGi还是其他程序并不重要。EquinoxApplication
org.eclipse.core.runtime.adaptor.EquinoxApplication