2009-07-27 67 views
14

我有一個java程序,我希望能夠從我的機器上的任何地方運行。我想從我的Cygwin命令提示符運行它。我製作了腳本來調用java程序。我將java程序的位置添加到類路徑中,當我從java程序的目錄運行它們時,這些腳本就起作用。然而,當我嘗試從任何其他目錄下運行,我得到:如何從其他目錄運行java程序?

java.lang.NoClassDefFoundError: commandprogram/CommandProgram 

這是我的腳本:

#!/bin/sh 
CWD=`dirname "$0"` 
java -cp "$CWD/classes;$CWD/lib/AJarFile.jar" commandprogram/CommandProgram 

修改Java線以下:

java -cp "$CWD/classes;$CWD/classes/commandprogram;$CWD/lib/AJarFile.jar" CommandProgram 

產生相同的結果。

+0

你可以發佈你的腳本,這將使人們對哪裏看...... – 2009-07-27 19:15:59

+0

不要你需要做的Java commandprogram/CommandProgram.class或Java的罐子commandprogram/commandProgram一個更好的主意。罐? – 2009-07-27 19:29:49

+0

isnt'路徑分隔符冒號(:)而不是你使用的分號(;)? – 2009-07-28 03:21:34

回答

3

想剛纔的一切我能想到的,我附和了命令和鋸有Cygwin路徑和Windows路徑的混合。解決的辦法是修改腳本:

#!/bin/sh 
CWD=`dirname "$0"` 
CWD=`cygpath -w "$CWD"` 
java -cp "$CWD/classes;$CWD/lib/AJarFile.jar" commandprogram/CommandProgram 

然後CWD改爲 「C:\ Program Files文件\ ...」 而不是 「/ cygdrive/C /程序\文件/ ...」

我以前遇到過這個問題,並用cygpath -w解決方案解決了這個問題,但稍後改變了我的腳本,並沒有注意到路徑問題回來了。

20

添加目錄到classpath的例子:

java -classpath commandprogram CommandProgram 

java -classpath directory_to_program Program 
1

你必須使用一個圓點分隔包,而不是一個斜槓。

java命令 「$ CWD /班; $ CWD/lib目錄/ AJarFile.jar」 commandprogram.CommandProgram

-4

運行的Java文件的通常方法是將其保存在Java/Bin夾,然後運行cmd

C:\Program Files\Java\jdk1.7.0_05\bin> javac filename.java && java classname 

如果您在不同的目錄中的文件保存諸如D:,你可以使用以下的CMD提示:

D:\Project java> set path=%path%;C:Program Files\Java\jdk1.7.0_05\bin