【发布时间】:2018-08-27 01:59:08
【问题描述】:
我写了一个非常简单的脚本,只有一个命令,这个脚本在交互式 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 错误不是这里的问题)
【问题讨论】:
-
检查环境是否存在差异,例如类路径或当前工作目录。哦,顺便说一句,“linux”标签被误用了(见它的描述!)而且这个主题也有点误导,
java程序在这两种情况下都可以正常工作,这是里面发生的事情,而不是。跨度> -
@UlrichEckhardt 事实上,正如下面所回答的,这是关于当前目录的问题。我仍然不明白为什么我在执行脚本或命令时在同一目录中时输出不同。