【发布时间】:2015-07-03 01:42:04
【问题描述】:
我在 Windows 7 中创建了一个 jar 文件 DirectoryScanner.jar。我想在 unix 服务器上执行这个 jar。
我在 putty 中运行了以下命令,并且 jar 按预期运行得非常好:
java -jar DirectoryScanner.jar
现在我想在 unix 服务器上创建一个 .sh 文件,它在执行时可以运行这个 jar。我创建了一个文件 Report.sh,我在其中编写了以下代码来执行这个 jar:
java -cp /home/applvis/Java/UAT/lib/DirectoryScanner.jar com.acc.directory.scanner.SDScanner
但是当我在putty中执行这个命令时,却显示如下错误:
[applvis@bg6lnxebs1 UAT]$ . ./ReportGen.sh
Exception in thread "Main Thread" java.lang.NoClassDefFoundError: com/acc/directory/scanner/SDScanner
Caused by: java.lang.ClassNotFoundException: com.acc.directory.scanner.SDScanner
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: com.acc.directory.scanner.SDScanner. Program will exit.
谁能告诉我我到底做错了什么,或者建议一些替代命令。
我的 jar 和 sh 文件都在不同的目录中。即使它们在同一目录中,我也会收到此错误。
附言。我有许多 jar 文件要一个接一个地执行。因此,与其一次又一次地编写命令在 unix 上单独运行每个 jar,我想创建一个 sh 文件,该文件将包含一个接一个地运行所有 jar 的代码。我只运行 sh 文件会更容易。因此,我需要将代码写入可以运行我的 jar 的 sh 文件中。
【问题讨论】:
-
为什么不在 unix 上坚持使用 java -jar DirectoryScanner.jar?
-
为什么你在shell脚本中输入的命令和你直接运行的命令不一样?你确定 SDScanner 类在那个 jar 中并且它有一个 main 方法吗?
-
我建议最可能的问题是 jar 文件的路径错误。 Java -jar 版本会识别这一点,而类路径可能不会。
-
第一个命令运行得非常好,所以 jar 不会有任何问题。我正在尝试一些新的东西,所以我想在单独的 sh 文件中编写命令。
-
我在 sh 文件中给出了相同的命令,但它仍然给了我 smae 错误