web-dev-qa-db-ja.com

Java外部.jarを使用したコマンドライン

.jarを使用してコードを再利用するプロジェクトを開発します。

したがって、TOOLS.jarという名前の.jarを使用し、ファイルHelloWorld.JavaでTOOLS.jarのパッケージTOOLSを参照する単純なアプリケーションを開発します。

私はこのコマンドラインでコンパイルします:

javac -g -d C:\MyApp -cp TOOLS.jar HelloWorld.Java

成功し、アプリケーションを実行したいときは、次のコマンドを使用します(C:\ MyAppフォルダーにいます)。

Java -cp <path>\TOOLS.jar;. HelloWorld

それは成功していますが、私の質問は:

複数の外部.jarがある場合、どのようにアプリケーションを実行しますか?

-cpオプションを使用してコマンドにそれぞれを追加する必要がありますか?

1つのバイナリファイルのみを生成して実行する方法はありますか(Cプログラムで.exeとして)?

25
TheFrancisOne

各jarファイル引数をcpに連結します。

; on Windows
: on Linux or Mac

例えば.

Java -cp <path>\TOOLS.jar;.;<path>\jar2.jar;<path>\jar3.jar HelloWorld

新しいJVM(6+、私は思う)では、*を使用してディレクトリ内のすべてのJARを追加することもできます。

Java -cp .;<path>\*; HelloWorld

さらに進んで、単一のパッケージ化された実行可能ファイルを作成するには、 この質問 を参照してください。

40
Joel

1つのフォルダーに多くのjarファイルがあり、それらを手動でクラスパスに追加したくない場合。 Windowsでは.bat、LinuxではShellを使用できます。

tomcatのcpappend.bat

rem ---------------------------------------------------------------------------
rem Append to CLASSPATH
rem
rem $Id: cpappend.bat 301115 2002-08-04 18:19:43Z patrickl $
rem ---------------------------------------------------------------------------

rem Process the first argument
if ""%1"" == """" goto end
set CLASSPATH=%CLASSPATH%;%1
shift

rem Process the remaining arguments
:setArgs
if ""%1"" == """" goto doneSetArgs
set CLASSPATH=%CLASSPATH% %1
shift
goto setArgs
:doneSetArgs
:end

また、「for」ステートメントを使用してすべてのjarファイルをクラスパスに追加する別のbatファイル

set CURRENT_DIR=%cd%
set CLASSPATH=.
for %%i in (%CURRENT_DIR%\lib\*.jar) do call cpappend.bat %%i
start Java -Duser.dir=%CURRENT_DIR%  -cp %CLASSPATH% a.b.c.MainApp
3
Terry Ma