java - 在unix中使用.sh文件运行.jar文件

标签 java bash shell unix jar

我有一个在 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/

相关文章:

java - 这个字符串构造函数的实现如何工作(java)?

linux - 删除方括号外的所有数据

linux - bash:如何仅传输/复制文件名以分隔相似的文件?

linux - 除非将脚本内容复制并粘贴到终端中,否则以其他用户身份或在 Chroot 环境中运行一系列命令不起作用

java - GIT 客户端如何处理存储库的错误 SSL 设置?

Java 客户端在通过 F5 BIG-IP 负载平衡器与 IIS 服务器进行 SSL 握手期间收到 "connection reset"

java - @Autowired 在 SpringRunner SpringBootTest 单元测试用例中

linux - 使用scala进程运行相关Ubuntu命令

linux - 无法在 bash 脚本中创建第三个参数(在 $* 之后)

postgresql - 使用 WShell.Script Run 启动批处理文件时 VBScript 挂起