我试图在Windows机器上运行Nashorn,并想提供一个简单的start.bat
文件来启动它。
在Unix上,这很简单, 但在Windows上,我努力可靠地findjjs.exe的位置。
我不想告诉我的用户:哦,去findJava 8 SDK的位置,并编辑start.bat
指向它的目录。
我试过了:
$其中的Java
C:\ ProgramData \ ORACLE \的Java \ javapath \的java.exe
其中也不包含jjs.exe。
JAVA_HOME
或JDK_HOME
默认没有设置,bin目录也不在PATH中; 所以现在看来我不得不依靠猜测默认位置。
还有其他的select吗?
我不认为这里有什么 绝对的傻瓜,因为有很多方法可能安装Java(例如,在一台机器上安装ZIP,并将其安装在另一台机器上)。 你不会告诉我们你的用户是如何安装的,或者你甚至可以确定他们有Java 8(这是jjs
所必需的)。
但可能足够好的是假设用户实际上运行安装程序。 在这种情况下,您可以在注册表中找到Java信息。 请参阅HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\1.8\JavaHome
,它应该为您提供最新1.8安装的Java主目录(您还可以在HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\1.8.0_*
下查找特定的发行版HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\1.8.0_*
)。
所以,例如,在我的测试机器上:
C:\Users\IEUser>reg query "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\1.8" /v JavaHome HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\1.8 JavaHome REG_SZ C:\Program Files\Java\jdk1.8.0_25
这是一个解决方案,但我不知道它有多好。 它假定已经安装了JDK。
import java.io.File; public class FindJJS { public static void main(String[] args) { System.out.println(System.getProperty("java.home") + File.separator + "bin" + File.separator + "jjs" + (System.getProperty("os.name").startsWith("Windows") ? ".exe" : "")); } }
编译它,把它放在lib /
在start.bat中:
for /f "usebackq tokens=*" %%a in (`java -cp lib FindJJS`) do "%%a"-scripting bin\yourscript.jjs -- %1