由于可移植性原因,我想手动安装BlueJ。我已经设置了Java_Home并将Java bin目录添加到路径环境变量中。我在c:\java上使用符号链接(symbolic link),它指向sd卡上的d:\java。

为什么BlueJ仍不假装不考虑它们,却无法检测到jdk。

更新:Eclipse可以,所以BlueJ和Jdk 1.8有一些特定的功能吗?

最佳答案

我刚刚在单独的驱动器上完成了BlueJ和JDK 1.8的全新安装,以复制您的问题。我建立了到JDK的符号链接(symbolic link),并将其放在JAVA_HOMEPATH中(根据您对C:\语法的使用,我猜您在Windows上,因此我在Windows 8.1上进行了测试)。
我也发现,在选择要运行的JDK时,BlueJ忽略了环境变量的设置。我可以通过使用配套程序选择BlueJ VM 来更改JDK,但无法在其中输入符号链接(symbolic link)(我相信在较早的版本中,更改VM是开始菜单上的一项设置,而不是单独的程序)。
总之:

  • BlueJ和Java 8兼容性不是问题
  • 符号链接(symbolic link)
  • 没问题
  • 至少对于Windows而言,这是由于BlueJ确定和存储其使用的JDK的方式(均通过注册表进行的操作)。
  • 如果需要,您可以手动将注册表项更改为符号链接(symbolic link)(请参见下面的详细信息),但这是一个额外的安装步骤。

  • 详细地
    我发现BlueJ在以下注册表项中存储了它使用的JDK的路径HKEY_CURRENT_USER\Software\BlueJ\BlueJ\3.1.5\CurrentVM请注意,根目录可以是HKEY_USERSHKEY_LOCAL_MACHINE,具体取决于您是为机器的一个用户还是所有用户安装的。
    问题是,如果您的系统在运行时或首次运行 BlueJ 或使用时,您的系统中只有一个VM可用,则此 key 会自动设置,以后再随时选择Select BlueJ VM 程序。此时提供给您的选项是启动器可以通过系统(在注册表中)检测到的JDK。一旦设置了该值,它就不会在运行时动态更改以反射(reflect)JAVA_HOME。即使使用选项中的“浏览”选项,我也无法通过GUI将符号链接(symbolic link)设置为JDK位置。
    可以,但是,请手动将该注册表项的值(例如,通过regedit)更改为您的符号链接(symbolic link)值(经过测试并验证为OK-可能需要管理员权限)。

    我查看了the source code以确定如何设置CurrentVM
    经过很短的跟踪(对BlueJ开发人员的良好称赞),我最终得出结论,用于启动BlueJ的实际代码是\package\winlaunch\bjlaunch.cc(source file mercurial link here)中的C++文件。
    这只是检查注册表项的值,如果不存在,则调用findRegistryVMs(),这会检查注册表(环境变量)中可用的VM并将其提供给用户。因此,似乎没有一种方法可以让BlueJ在无需手动注册表编辑的情况下使用JAVA_HOME中的值。

    N.B. 如果您确实将此键值手动更改为Symlink,则可以更改符号链接(symbolic link)链接到的位置,并且(重新启动)BlueJ将使用该符号链接(symbolic link)链接到的JDK。再次在Windows 8.1上进行测试和验证
    N.B. 2 最初,情况看起来很乐观:在Installer.java中,有一种方法称为findJavaPath(),该方法首先进行检查
    String javaHome = System.getProperty("java.home");
    
    在猜测是否可行之前,先进行一些猜测。因此,看起来它应该在安装时尊重JAVA_HOME的值。 但是,它似乎仅用于检查是否有兼容的(1.6+)Java版本。

    09-12 02:52