如何从其他目录运行java程序?

Swo*_*gan 17 java bash scripting cygwin

我有一个java程序,我希望能够在我的机器上的任何地方运行.我想从我的Cygwin命令提示符运行它.我已经制作了脚本来调用java程序.我将java程序的位置添加到类路径中,当我从java程序的目录运行它们时脚本工作.但是,当我尝试从任何其他目录运行时,我得到:

java.lang.NoClassDefFoundError: commandprogram/CommandProgram
Run Code Online (Sandbox Code Playgroud)

这是我的脚本:

#!/bin/sh
CWD=`dirname "$0"`
java -cp "$CWD/classes;$CWD/lib/AJarFile.jar" commandprogram/CommandProgram
Run Code Online (Sandbox Code Playgroud)

将java行更改为以下内容:

java -cp "$CWD/classes;$CWD/classes/commandprogram;$CWD/lib/AJarFile.jar" CommandProgram
Run Code Online (Sandbox Code Playgroud)

产生相同的结果.

woa*_*kas 24

将您的目录添加到classpath示例:

java -classpath commandprogram CommandProgram
Run Code Online (Sandbox Code Playgroud)

要么

java -classpath directory_to_program Program
Run Code Online (Sandbox Code Playgroud)


Swo*_*gan 4

在尝试了我能想到的所有方法之后,我回显了该命令,发现 Cygwin 路径和 Windows 路径混合在一起。解决方案是将脚本更改为:

#!/bin/sh
CWD=`dirname "$0"`
CWD=`cygpath -w "$CWD"`
java -cp "$CWD/classes;$CWD/lib/AJarFile.jar" commandprogram/CommandProgram
Run Code Online (Sandbox Code Playgroud)

然后 CWD 更改为“C:\Program Files\...”而不是“/cygdrive/c/Program\ Files/...”

我之前也遇到过这个问题,并用解决方案解决了cygpath -w,但是后来稍微改变了我的脚本,并没有注意到路径问题又回来了。