【问题标题】:How can the default JRE be overidden when a project is loaded?加载项目时如何覆盖默认 JRE?
【发布时间】:2020-10-30 22:10:58
【问题描述】:

我从不断变化的各种平台(学生)获得 Eclipse 项目,有时 JRE 不匹配,因此源代码中存在大量错误: “导入 java.util 无法解析” “默认构造函数未定义隐式超级构造函数 Object()。必须定义显式构造函数” 等等等等 该项目配置为使用我没有的 JRE: 因此,我必须手动编辑每个项目中的构建路径并重置 JRE。

之后,错误就消失了。问题是我会定期拥有其中的 10 或 20 个。 如何配置 Eclipse 以使用我机器上的 JRE 而不是项目中的(缺失的)JRE?

【问题讨论】:

  • JavaSE-14 执行环境应该适用于任何特定的 Java 14 JDK。您的 Eclipse 看起来非常过时,这可能是真正的原因。是否有理由进行逆向计算?
  • My Eclipse 是面向企业 Java 开发人员的 Eclipse IDE。版本:2019-09 R (4.13.0) 版本号:20190917-1200

标签: java eclipse


【解决方案1】:

尝试在 eclipse 配置文件中设置它 -

eclipse.ini 虚拟机参数

eclipse.ini vm 参数在您安装了多个 JDK 并且您希望确保您的 eclipse 在特定的 JVM 上运行而不是选择系统配置的 jdk 路径时很有用。必须在 -vmargs 之前定义。

eclipse.ini vm 参数 Mac

我的 eclipse.ini 文件 sn-p 显示了 -vm 参数的用法,用于将 eclipse 配置为在 Mac OS X 中使用 JDK8。

-vm
/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/bin
-vmargs

您可以为 Windows 或 Linux 操作系统进行类似的配置。只需相应地更改 JDK bin 目录路径即可。

【讨论】:

  • 已经有一个 vm 参数的设置,它被设置为一个下级 VM。我将它更新为我想要的虚拟机,但它仍然没有覆盖我加载到工作区的项目的虚拟机。
  • 配置可能已存储在您的 Eclipse 配置文件夹中。您可以尝试使用新的 eclipse 文件夹/工作区吗?此设置应适用于新工作区中的所有新项目。
  • 检查 .classpath, .project 文件,它可能已经在您的项目文件夹中设置了此首选项。您可以尝试删除它们并重新导入到 eclipse 或尝试 mvn eclipse : eclipse,如果它的 maven 项目。
  • eclipse.ini 中的-vm 标志控制用于运行Eclipse 本身的JVM,不是吗?该标志不影响用于在 Eclipse 中编译项目的 JDK。所以这个标志可能与这个问题无关。
【解决方案2】:

作为you say in the comment, you have Eclipse 2019-09 R (4.13.0),目前落后 4 个版本。 Eclipse 2019-09 于 2019 年 9 月发布,当时 Java 14 的开发才刚刚开始。 您的 Eclipse 对于 Java 14 来说太旧了,甚至对于 Java 13 来说也太旧了。

Make sure that your Eclipse is always up-to-date 以避免将来出现此类和其他问题。

【讨论】:

  • 我认为 Eclipse 版本与此问题无关。问题是发帖者提交的 Eclipse 项目文件配置了 JRE:s,这些文件只存在于学生的计算机上。
  • 默认情况下,JRE 由执行环境指定,而不是由特定的 JRE。如果您在 Window > Preferences: Java > Installed JREs 中有匹配的 JRE/JDK,它将无需执行任何操作(匹配意味着此处的 JRE/JDK 具有相同的 Java 版本或 - 当使用 release 选项 - 相同或更高 Java 版本的 JRE/JDK)。您在问题中描述的所有内容仅是由于缺少更新 Eclipse 造成的。
  • 嗯。我认为您没有正确理解海报问题。我认为问题在于学生将项目文件提交给海报。有时学生将他们的项目配置为使用本地 JRE:s。这些 JRE:s 在发帖者计算机上并不总是可用,导致屏幕截图中的错误。
  • 好吧,我想我明白了,但你不明白为什么会有 执行环境 以及它们与 JRE 有何不同(以及 release是什么> 选项用于)。
  • 问题中的截图清​​楚地显示了JavaSE-14(来自学生)。 JavaSE-14 是一个执行环境,而不是特定的 JRE。
【解决方案3】:

在 Eclipse 中,您可以使用项目 JRE 覆盖工作区默认 JRE。但我几乎可以肯定你不能反过来做,这就是你需要以一种漂亮的方式解决这个问题。

但也许您可以通过以下方式解决问题(这有点hack):

项目JRE规范存储在Eclipse项目目录下的.classpath文件中。

如果项目配置了特定的 JRE,.classpath 看起来像这样:

(注意classpathentry kind="con" 条目。)

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk-14.0.2+12">
        <attributes>
            <attribute name="module" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="output" path="bin"/>
</classpath>

没有指定 JRE .classpath 看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
        <attributes>
            <attribute name="module" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="output" path="bin"/>
</classpath>

如果这些文件被更新,Eclipse 会接受对项目设置的更改。

  • 也许您可以创建一个脚本来更新提交的文件以获得您需要的classpath 条目?
  • 也许您可以简单地从工作项目中复制并粘贴.classpath 文件?与通过 GUI 更改项目配置相比,这可能会节省几个手动步骤。

【讨论】:

  • 这个答案忽略了一个事实,即它不是一个特定的 JRE,而是一个执行环境 (JavaSE-14)。此处不需要使用特定 JRE 或 Workspace 默认 JRE,也不建议在此处使用,因为它可能会导致其他错误。这里真正的问题是使用了太旧的 Eclipse 版本,不理解执行环境JavaSE-14(因为JavaSE-14 的指定晚于此处使用的旧 Eclipse 版本发布)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-22
  • 2019-05-09
相关资源
最近更新 更多