Mac使用jdk7启动Intellij Idea

Mac使用jdk7启动Intellij Idea

我们当前研发的产品,不论是线上还是开发环境,基本上都已经用上了jdk1.7,而在macos 13.* 版本中,如果本地环境已经安装了1.7的jdk,但是没有1.6的jdk,idea启动的时候会报错,说需要旧的java se6才能支持。如题图所示。

首先怀疑是不是环境变量没设置好:于是增加了JAVA_HOME环境变量之后,问题依旧:
java home
jdk明明是向前兼容的,1.7下跑1.6能支持的软件一般(1)情况下是没问题的,为什么会出现这样的提示呢?原因肯定是在于idea哪里配置指定了只能使用1.6版本的jre才能运行。所以解决方法应该是从idea的配置文件入手。

进入idea的安装目录,有个Contents目录,里面有个Info.plist配置文件。
Info.plist
打开Info.plist,检索“1.6”字符串,果不其然,还真找到了:
modify
配置项是JVMVersion,配置的值是1.6, 把值改成1.7之后启动idea:
idea home

perfect,完美运行。看下这个Info.plist,其实还有其他的配置项在这里可以修改,在JVMOptions下面,除了有JVMVersion之外,还有VMOptions, ClassPath等配置项,可以修改。当然一般情况下,这些选项是够用的,不需要手工去修改他。

扩展阅读:
1: http://stackoverflow.com/questions/13575224/comparison-method-violates-its-general-contract-timsort-and-gridlayout
2: http://stackoverflow.com/questions/6626437/why-does-my-compare-method-throw-exception-comparison-method-violates-its-gen


  1. 为什么说1.6支持的软件“一般”能跑在1.7下面而不是“一定”呢?因为jdk7把一些底层的接口默认实现改了,但是会带来问题。比如Arrays.sort()方法,在1.6之前,这个方法模式使用的排序方式是mergeSort,而到了1.7,默认的实现变成了TimSort。在1.6下的正常排序到1.7可能会出现不正常或者说排序结果跟想象中的不一样。TimSort对每次比较的结果要求跟严格,在1.6下可以正常排序的结果,1.7可能会抛异常。