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

Java 如何在与当前项目的JRE不同的JRE上从库jar执行方法,java,jce,Java,Jce,我有一个项目1需要在1.7上运行,这个项目依赖于另一个基于1.8构建的项目2 我试图在项目1中从项目2调用一个类,但我得到了一个已知错误,该错误在1.8中已修复。如果我在JRE 1.8中的Project 2上单独运行这个类,那么它可以正常工作 任何潜在客户都可以为方法调用动态选择目标JRE?这是不可能的,如果您的项目依赖于1.7,那么它的依赖关系也应该是1.7。在运行时,所有代码都在同一个JVM中执行,因此无法动态地“选择”目标JRE 如果您真的没有其他选择,并且这两个库应该一起工作,那么您可能

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

我试图在项目1中从项目2调用一个类,但我得到了一个已知错误,该错误在1.8中已修复。如果我在JRE 1.8中的Project 2上单独运行这个类,那么它可以正常工作


任何潜在客户都可以为方法调用动态选择目标JRE?

这是不可能的,如果您的项目依赖于1.7,那么它的依赖关系也应该是1.7。在运行时,所有代码都在同一个JVM中执行,因此无法动态地“选择”目标JRE


如果您真的没有其他选择,并且这两个库应该一起工作,那么您可能会在项目1和项目2之间建立某种桥梁,其中项目1在单独的JVM实例中调用项目2。

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

下载并运行

在eclipse项目中,单击:

文件->导出->可运行jar文件->下一步

并为要提取的项目选择运行配置。完成

测试每个jar并确保其运行是一个好主意。双击,或者使用cmd找到它并执行java-jarnameofjartotest.jar

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

将正确的jre中的bin和lib文件夹复制并粘贴到刚才创建的文件夹中。如果您想运行Java 8,我的文件位于C:\Program Files\Java\jre1.8.0\u 201这样的位置。更清楚的是,您的文件结构应该是

你刚做的容器文件夹

  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)
运行Launch4j。添加.jar并选择输出文件路径。如下图所示

单击jre选项卡并在min jre字段中添加相应的jre。确保选择了“仅使用私有jdk运行时”选项。如果在下图所示的捆绑jre路径字段中使用“bin”和“lib”jre命名文件夹,请键入JREI

点击“构建包装器”。它看起来像一个齿轮。
如果对两个jar文件都这样做,并确保“bin”和“lib”文件夹来自要运行的jre,那么这两个程序在不同的运行时环境中都可以正常运行。如果您希望一个程序能够调用另一个程序,我发现Geeksforgeks网站有一个程序,如果您对规范路径满意。

当您选择1.7作为程序的JRE时,项目1引用的项目2的代码自然会在同一JRE中执行。如果你想让项目在不同的JRE中运行,你必须有两个Java进程和这两个程序之间的某种通信机制。在调用它们之前,你是否将项目编译成JAR?如果是这样,根据您使用的jar包装器,您可以绑定一个jre路径。明确地说,这意味着您在项目中放置了一个jre,因此它不需要系统范围的jre来运行。只需确保选择该选项,包装时仅使用私有JRE运行时。如果这有帮助,请让我知道,我会用图片和更多细节来回答。我只是没有百分之百的满足您的需要。@Terry我会立即尝试,这仍然意味着您必须打包一个JRE 1.8,否则项目2中的代码仍然无法执行。如果要求project 1在1.7上运行,那么这种方法将不起作用。@RakeshS我刚刚成功地测试并完成了两个在不同JRE上运行的程序,但是它们都是包装好的jar文件。这能解决你的问题吗?如果这对你有效,我不介意写一个答案。顺便说一下,我用的是Launch4j。