cygwinでjarファイルを実行できず、ファイルが見つからないというエラーが発生する問題が発生しました。
簡単であれば、bashでJavaソースコードを「翻訳」したでしょう。しかし、残念ながら、実装機能のためにこれを達成するのにかなり大きな障害があるため、jarファイルを使用する必要があります。
これでこれを行う方法を見つけるためにかなりの研究を行いましたが、成功することはできません。cygwinを使用する必要があります。
これが私が基本的にやりたいことです:
lockfile="$specialfolder/$passedargument.lock
java -jar `cygpath -w ./cygdrive/driveletter/folder/folder/javafile.jar -joption cygpath -w $lockfile`
また、次のようにダブルバックティックを試してみました。
pathtooutfile="${some_other_vars}/${that}_${work}.out"
java -jar `cygpath -w ./cygdrive/driveletter/folder/folder/javafile.jar` -joption `cygpath -w $lockfile`
$JAVA_HOME環境変数を試してみましたが、うまくいきませんでした。という変数があることを言及する価値があります。ロックファイルvar は次のように定義されます。
homedir= "/cygdrive/driveletter/folder/folder"
specialfolder= "$homedir/foler/$passedargument"
passedargument= $1 ###argument passed with execution of bash script
lockfile= "$specialfolder/$passedargument"
引き続き発生するエラーは次のとおりです。エラー:jarfileにアクセスできません。 ライセンスを777に修正しましたが、それもできませんね。次のように言及することもできます。-j オプションまたは-得るまたは-解放するに該当ロックファイルjarが実行することの1つは、ファイルをロックして複数のスクリプトの実行を管理することです。ちょっとついているのでどんなアドバイスでも大変感謝します。私はこれがcygwinの問題に近いと思います。
答え1
試してみましたか?cygpath -w -a .....
-a
絶対パスを返します。
例えば
$ cygpath -w ./screenshot.jpg
screenshot.jpg
$ cygpath -w -a ./screenshot.jpg
C:\cygwin64\home\tony\screenshot.jpg
答え2
あなたの表情なら
`cygpath -w ./cygdrive/driveletter/folder/folder/javafile.jar`
スペースが含まれていて結果をJavaに単一のトークンとして渡すには、スペースを二重引用符で囲む必要があります。シェルトレースがオンになっていると、式と結果を理解するのに役立ちますset -x
。
追加資料:
答え3
Windowsの絶対パスは常にドライブ文字で始まります(たとえば、C:\folder1\folder2\item.ext
.Cygwinの絶対パスはすべてのUNIX / Linuxファイルシステムと同じように始まります/
が、メタフォルダを提供してcygdrive
さまざまなWindowsドライブ文字をファイルシステムツリーにシームレスにマッピングできます(例:)/cygdrive/c/folder1/folder2/item.ext
(実際に私が提供した2つのサンプルファイルパスは同じファイルシステムオブジェクトに対応します。)
ここで根本的な問題は、パスが無効であることです。これは起動しませんが、/
何かを参照しているので相対パスです。良いWindowsドライブの文字とパスに対応する絶対パス:
cygpath -w ./cygdrive/driveletter/folder/folder/javafile.jar
主なポイントがなくても、次のような意味かもしれないと思います。
cygpath -w /cygdrive/driveletter/folder/folder/javafile.jar
参照を修正して一般的にクリーンアップすると、スクリプトの断片は次のようになります。
lockfile="$specialfolder/$passedargument.lock"
java -jar "$(cygpath -w /cygdrive/driveletter/folder/folder/javafile.jar)" -joption "$(cygpath -w "$lockfile")"