如何从Cygwin运行Java

时间:2012-03-13 19:31:55

标签: java bash cygwin classpath

我正在尝试编写一个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

对不起这个混乱,我只想一下子做所有事情。它告诉我,我的程序的主要类别找不到!((

有什么想法吗?

5 个答案:

答案 0 :(得分:12)

  • Java classpath使用分号作为标记分隔符。
  • 使用反引号代替单引号

尝试:

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 :(得分:5)

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

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

因此,该命令变为:

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的调用。

答案 2 :(得分:2)

你不需要反叛吗?

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

答案 3 :(得分:1)

  1. 您必须使用反引号('''符号)或$(cmd)bash sytax替换cmd输出
  2. java不了解unix-(cygwin-)样式路径,只有windows样式。
  3. 最后first link in google回答了你的问题

答案 4 :(得分:1)

问题的主要原因不是背景,而是结肠与分号的问题。因为在cygwin中,那里运行的java是针对DOS / Windows环境的,它期待';'作为路径分隔符。

虽然backtic确实有帮助,但问题的主要根源必须强调':'和';'之间的区别当Java在Unix或Windows环境中时。