如何从Cygwin运行Java

2022-09-03 01:44:50

我正在尝试编写一个BASH脚本来运行我的Java程序(常见问题,对吧?)。我只是不能完全让它工作。经过多次编辑后,以下是我尝试设置类路径然后执行程序的方法:

java -classpath 'cygpath -u "/cygdrive/c/Projects/common/lib/rome-1.0.jar:/cygdrive
/c/Projects/common/lib/jdom-1.0.jar:/cygdrive/c/Projects/common/lib/jsoup-1.6.1.jar:
/cygdrive/c/Projects/common/lib/mysql-connector-java-5.1.18-bin.jar:/cygdrive/c/Projects
/Freereader/bin/"' com.free.syndication.SQLfeeder

抱歉,混乱,我只是想一次做所有事情。它告诉我找不到我的程序的主类!((

有什么想法吗?


答案 1
  • Java 类路径使用分号作为标记分隔符。
  • 使用反引号而不是单引号

尝试:

java -classpath `cygpath -u "/cygdrive/c/Projects/common/lib/rome-1.0.jar;/cygdrive
/c/Projects/common/lib/jdom-1.0.jar;/cygdrive/c/Projects/common/lib/jsoup-1.6.1.jar;
/cygdrive/c/Projects/common/lib/mysql-connector-java-5.1.18-bin.jar;/cygdrive/c/Projects
/Freereader/bin/"` com.free.syndication.SQLfeeder

答案 2
  • 在 bash 中,语法比反引号更清晰$(command)`command`
  • cygpath具有在Windows和Unix之间转换类似PATH的值(而不是单个路径名)的选项,即-p
    • cygpath -pu 'C:\Users\me\bin;C:\Users\me\project\bin'会给/cygdrive/c/Users/me/bin:/cygdrive/c/Users/me/project/bin
    • cygpath -pw将在相反的方向上做同样的事情

请注意(如您的问题所示)不会更改任何内容,因为目录名称已经采用所需的(Unix)语法。您也可以省略它。cygpath -u "/cygdrive/c"

因此,该命令变为:

CP="C:/Projects/common/lib/rome-1.0.jar;C:/Projects/common/lib/jdom-1.0.jar;C:/Projects/common/lib/jsoup-1.6.1.jar;
C:/Projects/common/lib/mysql-connector-java-5.1.18-bin.jar;C:/Projects
/Freereader/bin"
# for a Windows Java binary:
java -classpath "$(cygpath -pw "$CP")" com.free.syndication.SQLfeeder 
# for a Unix Java binary:
java -classpath "$(cygpath -pu "$CP")" com.free.syndication.SQLfeeder 

或者,您可以从 Unix 样式的类路径开始,但命令保持不变。在任何一种情况下,如果类路径已经采用所需的语法,您当然可以省略对 cygpath 的调用。


推荐