2

私が実行した場合:

java -jar corpus-tools-0.0.2.jar removeTSfromCorpus

それは私にエラーを与えます:

Failed to parse the trailing argument list: 'removeTSfromCorpus'

ただし、実行した場合:

java -cp corpus-tools-0.0.2.jar removeTSfromCorpus

シームレスに動作します。scala-libraryはdependencies(MANIFEST)に含まれています。-cpと-jarの違いは何ですか?この場合は等しいはずだと思います

ありがとう!

4

3 に答える 3

5
java -cp jarfile classname

指定されたクラスパス ( -cp) を使用して classname を実行します。オプションを使用する代わりに、単に変数に-cp依存してクラスがどこにあるかを判断することができます。CLASSPATHjava

java -jar jarfile

指定されたファイルを使用し、ファイル MANIFESTで定義された.jarを実行します。これはスタンドアロン アプリに近い Java の近似値です。アプリはファイルにパッケージ化され、MANIFEST はそのファイル内のエントリ ポイントを指定します。詳しくはこちらをご覧ください。Main-Class.jar.jar.jar

removeTSFromCorpusしたがって、(元の質問に答えるために!) 最初の例では、MANIFEST で指定されたクラスを実行します。これは、何らかの方法でコマンド ライン引数として解釈しようとしています。2 番目の例では、CLASSPATH を .jar ファイルに設定しremoveTSFromCorpus、クラスとして実行します。

于 2013-03-06T10:56:30.717 に答える
2

JAR を実行する場合、MANIFEST.MF ファイルでメイン クラスとクラスパスを指定する必要があります。

次に、次のように実行します。

java -jar corpus-tools-0.0.2.jar

見る:

http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html

エキス

アプリケーションが JAR ファイルにバンドルされている場合、JAR ファイル内のどのクラスがアプリケーションのエントリ ポイントであるかを示す何らかの方法が必要です。この情報は、マニフェストの Main-Class ヘッダーで提供します。一般的な形式は次のとおりです。

メインクラス: クラス名

http://docs.oracle.com/javase/tutorial/deployment/jar/downman.html

エキス:

アプレットまたはアプリケーションのマニフェスト ファイルの Class-Path ヘッダー フィールドに含めるクラスを指定します。Class-Path ヘッダーは次の形式を取ります。

Class-Path: jar1-name jar2-name ディレクトリ名/jar3-name

于 2013-03-06T10:56:29.810 に答える
1

この-jarオプションはstatic main、jar ファイルで定義されたメイン クラスからメソッドを実行しようとし、引数を提供しますremoveTSfromCorpus

このオプションは、クラスパスを提供していると見なし、クラスからメソッド-cpを実行しようとします。mainremoveTSFromCorpus

于 2013-03-06T10:58:48.310 に答える