web-dev-qa-db-ja.com

実行方法Java from Cygwin

Javaプログラムを実行するためにBASHスクリプトを作成しようとしています(一般的な問題ですよね?)。それを完全に機能させることができません。何度も編集した後、次のようにします。クラスパスを設定してからプログラムを実行しようとしています。

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

ごちゃごちゃしてすみません、私はただ一度にすべてをやろうとしています。プログラムのメインクラスが見つからないことがわかります!((

何か案は?

15
blaughli
  • 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
12
rrhartjr
  • 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は反対方向にも同じことをします

ディレクトリ名はすでに目的の(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の呼び出しを省略できます。

5
user1010997

バックティックは必要ありませんか?

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
adarshr
  1. Cmd出力を置き換えるには、バッククォート( '`'シンボル)または$(cmd)bashsytaxを使用する必要があります
  2. Javaはunix cygwin-)スタイルのパスを理解せず、windowsスタイルのみを理解します。

そしてついに---(グーグルの最初のリンク あなたの質問に答えます

1

この問題の主な原因は、バックティックではなく、コロンとセミコロンの問題です。 cygwinでは、Javaが実行されているため、DOS/Windows環境では、パス区切り文字として「;」が必要です。

Backticは役に立ちますが、問題の主な根本原因は「:」と「;」の違いを強調する必要があります。 JavaがUnixまたはWindows環境にある場合。

1
typelogic