如何从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
- 您必须使用反引号(”’符号)或$(cmd)bash sytax来替换cmd输出
- java不懂unix-(cygwin-)样式路径,只有windows样式。
最后谷歌的第一个链接回答你的问题
问题的主要原因不是背景,而是结肠与分号的问题。 因为在cygwin中,运行那里的java用于DOS / Windows环境,所以它期待’;’ 作为路径分隔符。
虽然backtic确实有帮助,但问题的主要根源必须强调’:’和’;’之间的区别 当Java在Unix或Windows环境中时。