2016-07-15 9 views
0

.shファイルのシェルスクリプトファイルからjavaコード用の.jarファイルを実行しようとしています。 jarファイル名に "。"が含まれています。これはCygwinの端末をディレクトリと見なしています。ここでは、コマンドとその結果である:jarファイルのために.shファイルを実行する際にCygwin端末エラーが発生しました

java -jar ./lib/javax.json-1.0.jar 

結果:次に

no main manifest attribute, in lib\javax.json-1.0.jar

error: package javax.json does not exist
import javax.json.Json;

(右のjavax後)^期間以下にこのマークが。

どうすれば解決できますか?私はWindows 10で働いています。ありがとう!

編集:
私は実行するために多くの形式の.shファイルを書いていますが、実行されません。現在のものは:

# !bin/bash 
java -jar ./lib/javax.json-1.0.jar 
java -jar ./lib/javax.json-api-1.0.jar 
javac ./src/TimeTester.java 
java TimeTester 

これは良いですか? ...エラーで任意の助けを

.\src\TimeTester.java:22: error: package javax.json does not exist
import javax.json.Json; (With this^below the '.')
AND:
.\src\TimeTester.java:159: error: cannot find symbol
private static JsonObject getJsonFromString(String jsonStr){

そして、多くの類似した行:
私は次のエラーを取得していますか?

EDIT 2:
これは私の現在のファイルである :

javac -cp ./lib/javax.json-1.0.jar:./lib/javax.json-api-1.0.jar ./src/TimeTester.java 
java -cp ./lib/javax.json-1.0.jar:./lib/javax.json-api-1.0.jar:./src TimeTester 

しかし、私は取得しています。これにより

.\src\TimeTester.java:22: error: package javax.json does not exist
import javax.json.Json;
^

と(^)最後のドットの下(.Json)

編集3:
現在の.shファイルは次のとおりです。

#!/usr/bin/env bash 
cd src 
javac -cp '../lib/javax.json-1.0.jar;../lib/javax.json-api-1.0.jar' TimeTester.java 
java -cp '../lib/javax.json-1.0.jar;../lib/javax.json-api-1.0.jar' TimeTester 

最初のコマンド(javac)は動作し、.classファイルを生成します。しかし、2番目のコマンド(java)は機能せず、次のエラーが表示されます。

Error: Could not find or load main class TimeTester

本当にありがとうございます!

最終編集:
Jimに感謝して、シェルスクリプトが機能するようになりました。今、私は、Javaの実行エラーを得た:

java.io.FileNotFoundException: .\in_input\in.txt (The system cannot find the path specified)

おかげで、あなたの4つのコマンドの

+1

ドットは、bashの「カレントディレクトリ」を意味します。おそらくスクリプトはファイルシステムの特定の場所から実行されることを意図していたでしょうか?あなたは "。"を置き換えることができます。 jarファイルがシステムにインストールされている場所を見つけることができれば、完全なパスの残りの部分(多分/ cygdrive/cまたは/ cygdrive/c/usr)を使用してください。 bashスクリプトの残りの部分を見ることができれば助けになるでしょう。 –

+0

@JimLewis .shファイルを実行するために、多くの形式の.shファイルを書いていますが、実行されません。現在のものである: のjavac ./TimeTester.java ./src ./lib/javax.json-api-1.0.jar CD -jar ./lib/javax.json-1.0.jar のjava -jar のjava java ./TimeTester まだテストすることができません – Yano

+0

'Cygwin端末はディレクトリだと思っています'このエラーはcygwinエラーよりもJavaエラーに似ています。 – copeg

答えて

2

TL; DR理由bashcmd.exe間の競合コマンドラインシェルの規則のWindows用に書かれたプログラムでCygwinを使用するための痛みです。 Javaプログラムをコンパイルして実行するには、EclipseやNetbeansなどのIDEを使用する方がはるかに優れています。

あなたがしなければならない場合は、Windows JVMにLinuxスタイルのパスを渡すようにしようとしているので、しかし、...これの

なしに動作しません。私はあなたが最初の二つの文は第三javacラインのコンパイラにライブラリが利用できるように考えていることをsurmisingい

# !bin/bash 
java -jar ./lib/javax.json-1.0.jar 
java -jar ./lib/javax.json-api-1.0.jar 
javac ./src/TimeTester.java 
java TimeTester 

:しかし、あなたは、より基本的な誤解があるようです。これは真実ではない、これらの2行はjarファイルがメインクラスが含まれていないので、に、もちろん失敗したjarファイルを、実行にしよう

何が-cpに引数としてこれら二つのライブラリのパスを提供してやるべきことjavacコマンドのオプションです。

これは、LinuxスタイルのシェルエミュレータとWindows JVMを混在させているので、非常に扱いにくいところです。シェル用のパスはLinux形式でなければなりませんが、JVMで使用されるパスはWindows形式に変換され、JVM用のパス文字列はコロンではなくセミコロン(Windowsスタイル)で区切られなければなりませんLinuxスタイル)。 Cygwin(Linux)のセミコロンは1行に複数のコマンドを区切るため、パス文字列を引用符で囲んでセミコロンで区切らないようにする必要があります。

また、コンパイルするクラスの命名に問題があります。 Javaファイルのパッケージ宣言は表示されていませんが、デフォルトパッケージ(つまり、パッケージ宣言はなく、package src;ではありません)であると想定しています。その場合は、上記の1つのディレクトリではなく、srcディレクトリにある必要があります。

最後に、-cpを指定すると、現在のディレクトリをWindowsのクラスパスに追加する必要があります。そうしないと、新しくコンパイルされた.classファイルが見つかりません。

だから、コンパイルと実行コマンドは、Windows JVMはスラッシュを受け入れる簡単な相対パスの場合

javac -cp '../lib/javax.json-1.0.jar;../lib/javax.json-api-1.0.jar' TimeTester.java 
java -cp '.;../lib/javax.json-1.0.jar;../lib/javax.json-api-1.0.jar' TimeTester 

ことができますが、絶対的なLinuxのパス(すなわち/cygdrive/c/...を持っている場合、またはcygdriveのパスと/に設定する必要があります、/c/user/...のようなパス)、JVMはそれらを理解できず、cygpathを使って翻訳する必要があります。

+0

ありがとう!これは役に立ちます。今ではjavacは動作しますが、最後のコマンドは動作しません。このエラーが発生しました: >エラー:メインクラスTimeTesterを見つけられませんでした 投稿を更新します – Yano

+0

私の回答が更新されました。 '-cp'にカレントディレクトリを含める必要があります。 –

+0

あなたは素晴らしいです!それは今動作します..しかし、ファイルパスを文字列として指定すると、コード内からエラーが発生します。ファイルは正しい場所にありますが、linuxには見えません。私のコードはeclipde/Windowsで完全に動作します。 > java.io.FileNotFoundException:。\ in_file \ in.txt(指定されたパスが見つかりません) – Yano

0

なしに動作しません:javax.json-1.0.jarが実行可能jarファイルではありませんので、

  • java -jar ./lib/javax.json-1.0.jarは動作しません。

  • java -jar ./lib/javax.json-api-1.0.jarjavax.json-api-1.0.jarは実行可能なjarファイルではないため、動作しません。

  • javac ./src/TimeTester.javaクラスではjavax.jsonパッケージのクラスがクラスパス上にある必要があり、クラスパスを設定していないため、機能しません。 javax.jsonパッケージのクラスはjavax.json-1.0.jarファイルにあります。

  • java TimeTesterコンパイルが失敗したために機能しません。

これをすべて修正するには、最初の2行を削除し、他の2行にクラスパスを指定します。

javac -cp ./lib/javax.json-1.0.jar:./lib/javax.json-api-1.0.jar ./src/TimeTester.java 
java -cp ./lib/javax.json-1.0.jar:./lib/javax.json-api-1.0.jar:./src TimeTester 

プログラムを実行するときにクラスパスに./srcをリストする必要があります。

+0

ありがとう、しかしドットでエラーが発生しています。 > src \ TimeTester.java:22:error:パッケージjavax.jsonは存在しません > import javax.json.Json; この(^)は最後のドット(.Json) – Yano

関連する問題