5

バッチ ファイル「run.bat」を作成しました。

set CLASSPATH=%CLASSPATH%.;.\Jars\app.jar;.\Jars\a.jar;.\Jars\b.jar;.\Jars\c.jar;.\Jars\d.jar;
java mypackage.mysubpackage.Start
pause

アプリケーションに関連するすべてのクラス ファイルを「app.jar」に保持しており Start、アプリケーションの実行を開始するクラスです。この「run.bat」ファイルと、「app.jar」が参照したいすべてのjarが同じディレクトリにあります。
これらすべての jar を「Jars」フォルダーに保存し、上記のように「run.bat」ファイルで参照しました。ただし、「run.bat」ですべてのjarファイルを参照するには、パスを「.\Jars\jarname.jar」として指定する必要があります。「.\Jars\*.jar」を使用している場合、jar は「run.bat」によって参照されません。誰かがそれに代わるものを提供できますか?

4

4 に答える 4

2

次のように、forループを使用してクラスパスをバッチで作成してみてください。

@echo off
for %%jar in (.\Jars\*.jar) do call :add_jar %%jar

java -cp %CLASSPATH%;%JARS% mypackage.mysubpackage.Start
pause

exit /b

:add_jar
set JARS=%JARS%;%1
exit /b
于 2012-06-21T08:03:14.940 に答える
2

実際には、*.jar を使用して作業を半分しか行っていません。それらを classpath: として Java に渡す必要もありますjava -cp $CLASSPATH mypackage.mysubpackage.Start。(Windowsでは、スクリプトでの変数の使用は %CLASSPATH% だと思います)

後で編集: あなたの質問に対する BigMike のコメントを見てください。Java バージョン < 1.6 を使用している場合は、ループを使用して、各 jar の完全な名前を個別に含む完全な %CLASSPATH% を構築する必要があるかもしれませんシステム。

于 2012-06-21T07:22:58.593 に答える
1

以下のリンクにあるものを試すことができますhttp://docs.oracle.com/javase/6/docs/technotes/tools/windows/classpath.html

クラスパスのワイルドカードについてのセクション:

「* を含むクラス パス エントリは、クラス ファイルと一致しません。単一のディレクトリ foo 内のクラスと JAR ファイルの両方を一致させるには、foo;foo/* または foo/ ;foo のいずれかを使用します。選択した順序によって、クラスとリソースがfoo は foo の JAR ファイルの前にロードされます。またはその逆も同様です。サブディレクトリは再帰的に検索されません。たとえば、foo/は foo でのみ JAR ファイルを検索し、foo/bar、foo/baz などでは検索しません。"

したがって、あなたの場合は次のことを行う必要があります。

set CLASSPATH=%CLASSPATH%.;.\Jars;.\Jars\*

そしてそうではない

set CLASSPATH=%CLASSPATH%.;.\Jars;.\Jars\*.jar

必要なすべての jar が .\Jars フォルダーに存在する場合

于 2016-05-05T06:56:17.220 に答える