从shell脚本运行java文件

时间:2014-04-02 17:57:27

标签: java bash shell unix

我是通过shell脚本运行java文件的新手,对于那些经验丰富或掌握shell脚本知识的人来说,这可能是一个非常基本的问题。我在

下有一个名为Main.java的java文件
C:\project\Tranmissions\com.abc.files\src\main\java\com\abc\files
   +Main.java

我有一个名为run.sh的shell脚本:

#!/bin/bash

java -Xmx300m -classpath com.abc.files.Main -mainclass com.abc.files.payroll.f401k.xyz.AdpCwMain -driver org.hsqldb.jdbc.JDBCDriver

exit $?

我放在

下的这个脚本
C:\project\Tranmissions\com.abc.files.

现在,我已经下载了cygwin来运行脚本

./run.sh 

当我运行它时,我得到以下基本的java错误:

java.lang.NoClassDefFoundError: com/abc/files/Main
Caused by: java.lang.ClassNotFoundException: com.abc.files.Main
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: com.abc.files.Main.  Program will exit.
Exception in thread "main"

我正在使用STS(Eclipse)和maven命令安装来运行java文件。并能够运行我的类“主”java程序。

3 个答案:

答案 0 :(得分:1)

您不需要指定-mainclass,只需为该类提供主要内容即可。类路径也有你的类的com.abc前缀。您可能希望类路径成为当前目录,然后给您的类。如果您的JDBC不在类路径中,您也会收到错误。尝试这样的事情:

java -Xmx300m -classpath . \
  com.abc.files.payroll.f401k.xyz.AdpCwMain \
  -driver org.hsqldb.jdbc.JDBCDriver

使用#!/bin/bash -x运行以显示实际执行的命令。

答案 1 :(得分:0)

在名为Main.java的文件上调用“java”命令,首先应使用“javac”编译Main.java类。当程序以.class结尾时使用“java”,即Main.class

答案 2 :(得分:0)

在执行该行之前,您没有编译代码。

run.sh

中缺少javac行

为什么不试试j2sch,它会让你的生活变得更加简单。