我有一个在 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 文件中。
最佳答案
在 shell 脚本中更改为包含 jar 文件的目录。可能不是最佳实践,但我一直使用它来模拟脚本启动的“工作目录”。这样我的 shell 脚本就可以安装在 scripts
目录中,而我的 Java 可以安装在 lib
目录中。
假设执行脚本时的环境与从命令行调用 java 时的环境相同。
#!/bin/sh
cd /home/applvis/Java/UAT/lib
java -jar DirectoryScanner.jar
关于java - 在unix中使用.sh文件运行.jar文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29847709/