2017-02-03 256 views
0

我想用Nix安装OpenJDK 8或Oracle JDK 8以及Scala。在macOS上使用Nix安装Scala Sierra

我通过直接安装Oracle JDK开始。然后我通过运行nix-env -i scala通过Nix安装scala。这完成了。

但是,运行scalac失败:

% scala 
Exception in thread "main" java.lang.UnsupportedClassVersionError: scala/tools/nsc/MainGenericRunner : Unsupported major.minor version 52.0 
    at java.lang.ClassLoader.findBootstrapClass(Native Method) 
    at java.lang.ClassLoader.findBootstrapClassOrNull(ClassLoader.java:1070) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:414) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:412) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482) 

我有JAVA_HOME设置:

% echo $JAVA_HOME 
/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home 

要重申,我想通过尼克斯安装斯卡拉。我想学习一种或多种方法来做到这一点。一些注意事项:

  • 我很高兴详细了解Nix包是如何工作的,如果需要的话。
  • 我还没有得到一个关于如何在MacOS上通过Nix安装JDK的清晰权威解释。这似乎是故事的关键部分。
+0

的错误是不支持的'版本MAJOR.MINOR这52.0'意味着你JRE版本可能比你的SDK版本较低提交给美国nixpkgs的问题。您可能安装了Java 7 JRE,我会验证您是否安装了正确的版本。基本上你试图在较旧的运行时运行为java 8编译的代码。 – user1875195

+0

@ user1875195您的评估似乎是正确的;我检查了'scala'的Nix安装脚本(一个填充程序),并将JAVA_HOME设置为OpenJDK 7.接下来,我需要弄清楚如何告诉Nix安装版本8 JDK或依赖已安装的JDK。欢迎您提供完整的答案(这些仅仅是评论,对澄清有用) –

回答

2

首先,我卸载了scala和nix-env --uninstall scala

然后,我更新了我的~/.nixpkgs/config.nix包括:

{ 
    packageOverrides = pkgs: { 
    scala = pkgs.scala.override { 
     jre = pkgs.jre8; 
    }; 
    }; 
} 

然后我重新安装了斯卡拉与nix-env -i scala。普雷斯托!

更新1:更改jre = pkgs.openjdk8jre = pkgs.jre8

更新2:我在https://github.com/NixOS/nixpkgs/issues/22439

+1

您必须重写它的派生才能安装Scala,看起来像是一个可以报告给nixpkgs GitHub存储库的错误。 –

+0

@ Zimmi48好点。是的,从2.12开始,Scala需要版本8的JRE或JDK(请参阅http://scala-lang.org/news/2.12-roadmap)。 –