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

时间:2015-04-24 12:35:37

标签: 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文件就更容易了。因此我需要将代码写入sh文件中,该文件可以运行我的jar。

2 个答案:

答案 0 :(得分:5)

在shell脚本中,切换到包含jar文件的目录。可能不是最好的做法,但我一直用这个来模仿一个工作目录'脚本从哪里开始。这样我的shell脚本可以安装在scripts目录中,我的Java可以安装在lib目录中。

假设您执行脚本时的环境与从命令行调用java时的环境相同。

#!/bin/sh

cd /home/applvis/Java/UAT/lib
java -jar DirectoryScanner.jar

答案 1 :(得分:0)

根据您用于生成JAR的工具,它可能已经用f.e.替换了您的主类。设置类路径,然后调用您的类。在生成具有所有依赖项的胖JAR时,这种情况会发生很多。请检查JAR的内容,因为它可能依次包含其他JAR。