Java内核无法连接到jupyter笔记本
我正在使用SpencerPark IJava在jupyter笔记本中使用java 成功安装后,我打开了一个新的java笔记本,但它没有与jupyter笔记本连接 我试着在anaconda提示符下运行SpencerPark IJava官方文档中给出的命令Java内核无法连接到jupyter笔记本,java,jupyter-notebook,Java,Jupyter Notebook,我正在使用SpencerPark IJava在jupyter笔记本中使用java 成功安装后,我打开了一个新的java笔记本,但它没有与jupyter笔记本连接 我试着在anaconda提示符下运行SpencerPark IJava官方文档中给出的命令 jupyter console --kernel=java 它抛出了这个异常: Exception in thread "main" java.lang.UnsupportedClassVersionError: io/gi
jupyter console --kernel=java
它抛出了这个异常:
Exception in thread "main" java.lang.UnsupportedClassVersionError: io/github/spencerpark/ijava/IJava : Unsupported major.minor version 53.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
运行服务器的jupyter笔记本中也显示了相同的错误
有人知道如何解决这个问题吗?IJava是为java 9编译的(因为这是引入JShell的版本)。这意味着内核需要在9版或更高版本的JVM上运行。这就是
不受支持的53.0版主次版本所建议的
通常,遇到此问题的用户安装了正确的版本,但他们使用的是旧的JVM,而不是新安装的JVM。有两个选项可以解决此问题:
通过更改kernel.json
,准确地告诉Jupyter启动内核的java版本:
- 执行
jupyter kernelspec list
查找内核的安装目录
Available kernels:
java C:\Users\Spencer\AppData\Roaming\jupyter\kernels\java
...
- 在该目录中找到
kernel.json
并更改argv
。json是一个配置文件,它还告诉jupyter如何启动内核。argv
只是一个要执行的命令注意:使用/
或在使用\
时,必须通过编写\
在JSON中转义它们
{
“argv”:[
//“爪哇”,
“C:/absolute/path/to/jdk-9/bin/java”
“-jar”,
“C:/Users/Spencer/AppData/Roaming/jupyter/kernels/java/ijava-1.3.0.jar”,
“{connection_file}”
],
...
}
这里我还要提到,env
是一个环境变量字典,Jupyter将在调用argv
之前设置它。您可以使用它来设置JAVA\u HOME
或运行内核时始终需要设置的其他变量。在Mac上,这似乎是用户更熟悉的
{
...
“环境”:{
“JAVA_HOME”:“/Library/JAVA/JavaVirtualMachines/jdk-9.jdk/Contents/HOME”
}
}
- 或者,您可能还需要更改
显示\u名称
,以包含该版本。如果您设置了几个版本,这很方便,因此当您使用下拉菜单选择新内核时,它会显示java9
(例如)
在启动笔记本之前,将java 9临时添加到路径中
- 就像上面提到的那样,内核只是执行
java
命令来启动内核。这意味着我们可以将最新的java版本放在路径的前面
set PATH=C:\absolute\PATH\to\jdk-9\bin\;%路径%
将执行此操作。
- 作为旁注,我有一些变量
JAVA7_HOME
,JAVA8_HOME
,JAVA9_HOME
来简化这个切换。然后我使用set PATH=%JAVA9\u HOME%\bin\;%路径%
以使用特定版本
- 然后,当使用
where java
时,它可能会给出多个路径,但列表顶部的路径应该是java 9
- 最后,用这条新路径启动笔记本,您应该可以开始了。把所有的东西放在一起
set PATH=%JAVA9_HOME%\bin\;%PATH% && jupyter notebook
或
export PATH=$JAVA9_HOME/bin/:$PATH&&jupyter笔记本
不,我的内核不是从这里开始的,我的java代码在其他IDLE中正常运行。因此,这个解决方案没有帮助。您似乎误解了错误。代码是用比试图运行它的JRE更新的JDK版本编译的,因此出现了UnsupportedClassVersionError
。