如何在与当前项目的 JRE 不同的 JRE 上执行库 jar 中的方法

How do I execute a method from a library jar on a different JRE than my current project's JRE

我有一个项目 1 需要在 1.7 上 运行,这个项目依赖于另一个基于 1.8 构建的项目 2。

我正在尝试从项目 1 中的项目 2 调用 class,但我收到一个已知错误,该错误已在 1.8 中修复。如果我 运行 这个 class 单独在 JRE 1.8 的项目 2 上,它工作正常。

任何导致为方法调用动态选择目标 JRE 的方法?

这是不可能的,如果你的项目依赖于 1.7,它的依赖项也应该是 1.7。在运行时,所有代码都在同一个 JVM 中执行,无法动态 'choose' 目标 JRE。

如果您真的别无选择并且这两个库应该一起工作,您可以在项目 1 和项目 2 之间构建某种桥梁,其中项目 1 在单独的 JVM 实例中调用项目 2。

如果您愿意制作一个 jar 并为每个程序使用一个包装器,您可以将一个特定的 jre 与每个可执行文件捆绑在一起。

  1. 下载并运行Launch4j

  2. 在您的 eclipse 项目中,单击:

    File -> export -> runnable jar file -> next

    和 select 您要提取的项目的 运行 配置。命中Finish

  3. 测试每个 jar 并确保它 运行 是个好主意。双击,或者用cmd找到然后执行java -jar nameOfJarToTest.jar.

  4. 为您的 jre 创建一个子文件夹。我刚打电话给我 "jre"。

  5. binlib 文件夹从正确的 jre 复制并粘贴到您刚刚创建的文件夹中。如果你想 运行 java,我的位于 C:\Program Files\Java\jre1.8.0_201 之类的地方 8. 为了更加清楚,你的文件结构应该是

someContainerFolder(folder you just made)

  nameOfJarToTest.jar

  jre(folder you just made)

        bin(folder copied from the jre in your file system)

        lib(folder copied from the jre in your file system)
  1. 运行 Launch4j。添加 .jar 和 select 输出文件路径。字段如下图

  2. 单击 jre 选项卡并在 min jre 字段中添加相应的 jre。确保你 select 选项 Only use private jdk runtimes。在下图所示的 "bundled jre path" 字段中键入 "jre"(如果您使用 'bin' 和 'lib' jre 命名文件夹)。

  1. 点击 'build wrapper'。它看起来像一个设置齿轮。

如果你对两个 jar 文件都这样做,并确保 'bin' 和 'lib' 文件夹来自你想要 运行 的 jre,这两个程序都会 运行 在不同的 运行 时间环境下都很好。如果您希望一个程序能够调用另一个程序,我发现 geeksforgeeks 网站有 a very simple and concise way for you to call external executable files from your code 如果您对规范路径没问题。