如何为Mac运行java命令制作可执行文件

时间:2011-12-20 12:45:24

标签: java macos executable

我在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 ..

,我也无法解决它

1 个答案:

答案 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之外的任何内容都不会在您的脚本中运行。)