我必须执行以下脚本
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.
我知道这是一个没有正确设置classpath变量的问题。我猜错了语法。任何人都可以帮助它。感谢
答案 0 :(得分:0)
export CPATH=".:/mdcode/mtrxmdsb2/WaferChecks/bin/WaferChecksFile.jar"
此外,您不必将shell变量放在引号中。
答案 1 :(得分:0)
从分配行中删除export CPATH=
。这迫使java查找名为cpath=.
而不是.
的文件或目录。
#! /bin/bash
jarfile=/mdcode/mtrxmdsb2/WaferChecks/bin/WaferChecksFile.jar
cpath=.:${jarfile?}
您不需要export
,因为您将$ cpath作为参数传递给java
-classpath
选项。
En passant,你可以在调用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