我只用一个命令编写了一个非常简单的脚本,这个脚本在交互式shell中工作但不在脚本中。
#!/bin/sh
echo "--- Running game ---"
java -cp lib/java-json.jar:bin:. com.theaigames.game.warlight2.Warlight2 "../example-map.txt" "java -cp bot.BotStarter" "java -cp bot.BotStarter" 2>err.txt 1>out.txt
当我在执行脚本后显示err.txt的内容时,我得到了这个:
Error: Could not find or load main class com.theaigames.game.warlight2.Warlight2
但是当我在交互式shell中使用它时,程序就会执行:
Exception in thread "main" java.lang.NoClassDefFoundError: org/json/JSONException
at com.theaigames.game.warlight2.Warlight2.setupGame(Warlight2.java:91)
at com.theaigames.engine.Engine.start(Engine.java:89)
at com.theaigames.game.warlight2.Warlight2.main(Warlight2.java:293)
Caused by: java.lang.ClassNotFoundException: org.json.JSONException
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 3 more
(这里的java错误不是问题)
答案 0 :(得分:1)
可能由当前工作目录路径引起。您可以使用-Duser.dir
JVM参数来确保。
或者,您可以在执行java之前更改路径。
#!/bin/sh
cd <your dir>
java <some arguments>