如何从Cygwin运行Java

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

抱歉,混乱,我只想一下子做所有事情。 它告诉我,我的程序的主要类无法找到!((

有任何想法吗?

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

你不需要反叛吗?

 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. 您必须使用反引号(”’符号)或$(cmd)bash sytax来替换cmd输出
  2. java不懂unix-(cygwin-)样式路径,只有windows样式。

最后谷歌的第一个链接回答你的问题

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

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