0

我必须执行以下脚本

export CPATH="cpath=.:/mdcode/mtrxmdsb2/WaferChecks/bin/WaferChecksFile.jar"
/sail/lpp/IBM/Java/1.6.0/jre/bin/java \
    -classpath "$CPATH" com/ibm/md/waferchecks/ReadPasswordMain $1 $2 $3

该脚本接受 3 个参数。但是当我从 cmd 提示符运行脚本时,我收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: com.ibm.md.wafercheck
s.ReadPasswordMain
Caused by: java.lang.ClassNotFoundException: com.ibm.md.waferchecks.ReadPassword
Main
        at java.net.URLClassLoader.findClass(URLClassLoader.java:421)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:652)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:346)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:618)
Could not find the main class: com/ibm/md/waferchecks/ReadPasswordMain.  Program
 will exit.

我知道这是未正确设置类路径变量的问题。我猜我在某处的语法错了。任何人都可以请帮忙。谢谢

4

2 回答 2

0
export CPATH=".:/mdcode/mtrxmdsb2/WaferChecks/bin/WaferChecksFile.jar" 

此外,您不必将 shell 变量放在引号中。

于 2012-07-24T07:11:47.303 回答
0

export CPATH=从分配行中删除。这迫使 java 查找名称为 .cpath=.而不是..

#! /bin/bash
jarfile=/mdcode/mtrxmdsb2/WaferChecks/bin/WaferChecksFile.jar
cpath=.:${jarfile?}

您不需要export, 因为您将 $cpath 作为参数传递给java -classpath选项。


顺便说一句,您可以在调用 java 之前执行一些检查,以使用以下行消除一些微不足道的错误:

(< ${jarfile?}) || exit # abort on missing or unreadable file[*]
  • ${path:?} 如果路径变量为空或未定义,则中止
  • ( < file ) || exit 是对打开文件进行读取的能力的最小测试。

(这是 bash、ksh93 和 zsh 的常用习语。)


最终的脚本就变成了:

#! /bin/bash
jarfile=/mdcode/mtrxmdsb2/WaferChecks/bin/WaferChecksFile.jar
cpath=.:${jarfile?}
(< ${jarfile?}) || exit

/sail/lpp/IBM/Java/1.6.0/jre/bin/java \
    -classpath "${cpath?}"  \
    com/ibm/md/waferchecks/ReadPasswordMain $1 $2 $3
于 2012-08-01T10:31:30.650 回答