我在Windows上运行以下命令:
java -classpath lib/prov-jdk14-132.jar;../EncUtility com.xxxx.projects.disc.bowl.FileChooseApp
现在我正在使用nano命令在OS X中使用以下命令创建可执行文件:
java -classpath ../EncUtility/lib/prov-jdk14-132.jar:../EncUtility com.xxxx.projects.disc.bowl.FileChooseApp
此命令在终端中运行完美,但当我使用nano命令创建实用程序时,它会显示以下错误:
cp_mac1$ /Users/cp_mac1/Desktop/EncUtility/start ; exit;
Exception in thread "main" java.lang.NoClassDefFoundError: com/xxxx/projects/disc/bowl/FileChooseApp
Caused by: java.lang.ClassNotFoundException: com.xxxx.projects.disc.bowl.FileChooseApp
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)
logout
[Process completed]
我发现它在路径中使用了额外的/start
。但即使使用cd ..
答案 0 :(得分:2)
您的脚本正在与存储脚本不同的文件夹中运行...
当你启动脚本时,当前工作目录不是脚本的位置,它是你运行它时碰巧遇到的任何文件夹。
尝试使用Getting the source directory of a Bash script from within中的代码段设置工作目录,路径应该是相对的:例如
#!/bin/bash
SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
cd $DIR/..
exec java -classpath EncUtility/lib/prov-jdk14-132.jar:EncUtility \
com.xxxx.projects.disc.bowl.FileChooseApp
序言会使用各种shell魔法来解决脚本实际存储的位置。然后cd
将工作目录更改为包含该目录的文件夹,而exec
只是效率很低:它用Java VM替换脚本的可执行进程,而不是将其作为子进程启动。 (请注意,除exec
之外的任何内容都不会在您的脚本中运行。)