2011-12-20 120 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