当前位置: 首页 > 知识库问答 >
问题:

如何使Eclipse抵抗Java更新的更好方法

罗业
2023-03-14

这是一个众所周知的问题,当您在Windows上更新Java、JDK或JRE时,Eclipse很可能无法启动,因为它指向过时的JDK/JJRE文件夹。修复是相对简单的,它是在这里或这里的几个线程上讨论和解决的。

但我发现这些解决方案缺乏灵活性,令人不满意。此解决方案建议在eclipse中手动修复路径。ini转换为:

-vm C:\Program Files\Java\<jdk-version-just-installed>\bin\javaw.exe

这意味着你必须在每次更新后,一次又一次地进行。如果您经常更新JDK,并且每个人都应该有最新的安全补丁,这会使它非常烦人。

我希望在智能安装之后,每个Java程序都可以开箱即用,而不涉及任何手动步骤;任何低于这一点的解决方案我都不会认为令人满意。

我可以想到两种方法:

> < li>

使用环境(系统)变量,如JAVA_HOME。< code>eclipse.ini可以引用环境变量吗?

使用指向最新JDK的符号链接。如果您想知道,是的,带有NTFS的Windows支持符号链接。

但是,这两种方式都需要安装程序的一些合作,无论是JAVA_HOME还是符号链接,才能更新为新值。当然是自动的,否则就没有理由首先拥有它们。如果我错了,请纠正我,但是Linux上的JDK / JRE安装正是这样做的,提供并更新到最新JDK / JRE的符号链接。为什么不是Windows安装程序?

Java安装工具中是否有隐藏的参数、选项或开关可以做到这一点?< br >如果没有,是否有更好的替代安装工具?< br > Eclipse launcher本身能找到最新的Java吗?< br >有更好的eclipse.ini参数吗?

共有3个答案

聂涛
2023-03-14

以前的Windows JDK安装程序用于复制<code>java。exe和javaw。exe(我认为还有javavm.dll),以使它们在默认路径中可用。

在最近的安装程序中,会在< code > C:\ program data \ Oracle \ Java \ javapath 中为< code>java.exe 、< code>javaw.exe和< code>javaws.exe创建一个符号链接。这意味着这些可执行文件将始终指向最新的JDK更新。

孟选
2023-03-14

我们如何避免这个问题:我们为我们的开发环境(用于eclipse和我们的产品)定制了专用JDK,这些JDK没有“附加”到系统。我们使用软链接,例如…/app/jdk链接到特定的jdk,对于intellij,我们有一个…/app/intellij-jdk软链接。

不知道在windows中谁来做,但是在linux中你下载gzip并解压它,这会搞乱你的系统,比如路径,我认为对于windows你只能下载安装程序,但是有可能只从可执行文件中解压实际的软件。

呼延永新
2023-03-14

在< code>eclipse.ini或命令行中指定VM的目的是将它与系统更新隔离开来。例如,在过去,一些程序安装自己的JVM并将其包含在系统路径中是一个大问题(Oracle在这方面尤其糟糕)。所以整个想法是将Eclipse从这些变化中隔离出来;它不应该关心您的系统上还有什么其他的JVM,它指的是一个“已知的”运行Eclipse的好JVM。

另一种选择是将 JVM 直接放在 Eclipse 安装目录下,位于名为 jre 的目录中,如此处所述。但是,我个人从不这样做;我觉得这是不必要和繁琐的。

我所做的可能会帮助您的是,不要将JVM更新安装到名称反映实际更新版本的单独目录中。相反,我基于主要的java版本将JDK安装到一个一致的位置。例如:

/Java/
    /JDK/
        /1.7/
            /bin/
            <etc...>
        /1.8/
            /bin/
            <etc...>

这样,在< code>eclipse.ini(或任何其他需要引用特定JVM的地方)中,我只需使用< code>/Java/JDK/1.8,无论我在那个位置安装了多少更新,它都将继续工作。

 类似资料:
  • 当前安装的软件:Android Developer Tools 21.0.1.201212060302(com.Android.ide.eclipse.adt.package.product 21.0.1.201212060302) 一次只能安装下列其中之一: 无法满足依赖项: 无法满足依赖项:

  • 问题内容: 我是SQLAlchemy新手。 假设我在声明模式下有一个用户表: 当我知道没有将对象加载到会话中的用户ID时,我会像这样更新该用户: 我不喜欢使用,我应该不再为此担心吗? 有一个更好的方法吗? 谢谢! 问题答案: 在ORM级别上也有一些更新功能。它还不能处理任何棘手的情况,但是对于单行更新(或批量更新)的普通情况,它可以正常工作。它甚至会遍历所有已加载的对象,并将更新应用于它们。您可以

  • 我已尝试更新我的Eclipse。目前我的Eclipse中只有2.2版Android SDK。昨天我更新了我的Eclipse,如下所示: 蚀- 我在这里发布了一些我从下载和安装得到的信息的最后一行: 准备安装档案下载Android SDK平台-工具,版本12 安装Android SDK平台-工具,版本12 停止ADB服务器成功。 安装Android SDK平台-工具,版本12 下载Android S

  • 我定义了两个HTTP GET API /test-mono和 /test-no-mono,除了 /test-mono使用Mono返回类型之外,两者都是完全相同的。HelloControlllerSpec使用100个线程池测试两个API 1000次, /test-no-mono需要45秒,但 /test-mono需要4分钟以上,为什么?看起来 /test-no-mono的默认并发配置比 /test-

  • 问题内容: 我正在使用alix 2d13开发基于Linux的设备。 我已经开发了一个脚本,负责创建映像文件,创建分区,安装引导加载程序(syslinux),内核和initrd,并负责将根文件系统文件放入正确的分区。 配置文件位于tmpfs文件系统上,并在系统启动时由读取驻留在自己分区上的XML文件的软件创建。 我正在寻找一种更新文件系统的方法,并且我考虑了两种解决方案: 固件更新是一个压缩文件,可

  • 我有一个要求,取决于地图的特定键值,我需要格式化输出。 例如,如果它的值大于1,那么只需要在值(12.23)后面显示2个小数点,或者如果它的值小于1,我需要在它后面显示4个小数点。 我已经编写了代码,它工作正常,但我正在寻找一种更好的方法来做到这一点(基本上我不喜欢我的代码中的其他条件) 这是我的程序,根据最后一个属性键值,我正在格式化输出