如何从Cygwin运行Java

如何从Cygwin运行Java,java,bash,cygwin,classpath,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: /cygdri

我正试图编写一个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 -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样式的路径
  • 最后回答你的问题

    • Java类路径使用分号作为标记分隔符
    • 使用反勾号而不是单引号
    尝试:

    • 在bash中,语法
      $(command)
      比backticks
      `command`
    • cygpath
      有一个
      -p
      选项,用于在Windows和Unix之间转换类似路径的值(而不是单个路径名),即。
      • 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的调用。

    问题的主要原因不是backtic,而是冒号与分号的问题。因为在cygwin中,运行在那里的javas对于DOS/Windows环境,应使用“;”作为路径分隔符


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

    您是否尝试过
    echo”cygpath-u“/cygdrive/c/Projects/common/lib/rome-1.0.jar:/cygdrive/c/Projects/common/lib/jdom-1.0.jar:/cygdrive/c/Projects/lib/jsoup-1.6.1.jar:/cygdrive/c/Projects/common/lib/mysql-connector-java-5.1.18-bin.jar:/cygdrive/c/Projects/freereder/bin/"“
    以确保它能够生成正确的路径?如果您将这些JAR直接添加到类路径中而不是将它们全部输入,不是会容易得多吗?或者,在您的情况下,您不能这样做吗?关于Java和Cygwin的常见问题:-给出了在Cygwin和Windows之间何时以及如何转换类路径的详细解释“谢谢这和一些轻微的调整,一切正常。
    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