2011-12-20 241 views
0

我有以下在Windows上运行命令:如何使Mac的可执行文件运行java命令

java -classpath lib/prov-jdk14-132.jar;../EncUtility com.xxxx.projects.disc.bowl.FileChooseApp 

我现在用的纳米命令使可执行文件在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

在您的Windows命令中,您有/ Users/cp_mac1/Desktop/EncUtility/Bowl,而在您的MacOS版本中,只有../EncUtility;不应该是../EncUtility/Bowl? – 2011-12-20 12:49:34

+0

不,我也注意到......但它在终端上工作正常...... – DShah 2011-12-20 12:57:13

+0

我认为这与目标C没有任何关系,请您在您拥有的示例中将您的雇主名称带出classpath发布。没有人应该在每年的这个时候被解雇。哦,这是一个类路径问题。我看到你在第二个例子中传递了相对路径。也许就是这样。 – 2011-12-20 15:37:53

回答

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以外,什么也不会在您的脚本中运行。)

+0

我应该如何存储此文件? ?我的意思是我应该给什么延长? – DShah 2011-12-20 17:53:58

+0

您不需要在Unix系统的程序上使用“扩展名”;只需将其设置为具有可执行权限。 EG,你可以命名这个文件为“file-choose-app”并执行'chmod + x〜/ path/to/file-choose-app'或者(我认为你可以)在“Get信息“窗口在Finder中。 ('#!/ bin/bash'标题行告诉系统如何解释程序。) – BRFennPocock 2011-12-20 17:58:13

+0

ok会尝试它.. – DShah 2011-12-20 18:00:55