web-dev-qa-db-ja.com

作成するBATファイルJava CLASSPATH

Javaで記述されたコマンドラインアプリケーションを配布したい。

私のアプリケーションはZipファイルとして配布されます。このファイルには、メインクラスの呼び出しに必要な.jarファイルを含むlibディレクトリエントリがあります。現在、Unix環境には、libディレクトリのすべてのファイルを追加することによって作成されたCLASSPATHでJavaコマンドを呼び出すシェルスクリプトがあります。

同様の機能を持つ.BATファイルを作成するにはどうすればよいですか? Windowsの世界でUnixコマンドを見つけるのと同等のものは何ですか?

39
Binil Thomas

バッチスクリプトでforループを使用したい

 @echo off
 setLocal EnableDelayedExpansion
 set CLASSPATH="
 for /R ./lib %%a in (*.jar) do (
   set CLASSPATH=!CLASSPATH!;%%a
 )
 set CLASSPATH=!CLASSPATH!"
 echo !CLASSPATH!

これは、ディレクトリ内のすべてのファイルを反復処理するバッチスクリプトを探していたときに本当に役立ちました。ファイルを削除することですが、非常に便利です。

空のディレクトリを削除する1行のバッチスクリプト

正直に言うと、Jonの答えを使用してください。すべてのファイルが1つのディレクトリにある場合、はるかに優れています。

65
Henry B

なぜfindを使用するのですか?おそらく、jarファイルに必要なすべてのライブラリを事前に知っているので、なぜそれらを一覧表示しないのでしょうか。

別の方法として、常に-Djava.ext.dirs=libを使用して、そのようにすべてをピックアップすることもできます。

29
Jon Skeet

6.0以降、Javaはワイルドカードクラスパスをサポートします。

Javaコマンドラインクラスパス構文

18
basszero

CLASSPATH設定をスクリプトの外部に保持し、/ Vを使用してシェルを開始しなかった場合のバリエーションは、次のようなことができます。

@echo off
FOR /R ./lib %%a in (*.jar) DO CALL :AddToPath %%a
ECHO %CLASSPATH%
GOTO :EOF

:AddToPath
SET CLASSPATH=%1;%CLASSPATH%
GOTO :EOF

コマンドラインで遊んでいるだけで環境を設定するのに便利です。

5
Eric Sorensen

executable JAR のように聞こえます。メインルーチンに必要なすべてのJARを含むZipを配布し、実際にコマンドシェルで実行する場合、マニフェストで定義されたメインクラスとクラスパスを使用して実行可能JARを作成できます。ユーザーがしなければならないことは、JARとボブの叔父をダブルクリックすることだけです。

4
duffymo
SET CLASSPATH=""
FOR /R /lib %%a in (*.jar) DO CALL :AddToPath %%a
echo %CLASSPATH%

Java -cp %CLASSPATH% com.a.b.MyClass

pause

:AddToPath
SET CLASSPATH=%1;%CLASSPATH%
GOTO :EOF
2
Shirin Joshi

Windows/LinuxのコマンドラインJARをリリースするときに行うことは、ANTコマンドを使用してJAR内にすべてのJARライブラリを埋め込むことです。

       <fileset dir="${module.classes.dir}"/>
       <zipfileset src="${endorsed.lib.dir}/myLibrary.jar"/>

このようにして、ライブラリはクラスファイルと一緒に溶けます。

バイナリ再利用性の最良の方法ではありませんが、ライブラリがそれほど重くない場合は、OSでJava -jar myApp.jarを呼び出すだけでアプリケーションを実行できます。

0
Demiurgo

移植性を高めるためのオプションは、バッチファイル自体の場所を基準にしてクラスパスを設定することです。

Windowsの場合(Java 6 +、。/ binのクラス、。/ libのjar)を想定):

@Java -classpath %~dp0/bin;%~dp0/lib/* ClassName %1
0
Mike Godin

Mavenを使用してプロジェクトをビルドする場合、少し異なる方法を使用できます。 Application Assembler Mavenプラグインは、Javaアプリランチャーを作成することを目的としています。このプラグインは、batファイルランチャーを生成し、指定されたフォルダーに依存関係を配置します。 \悪魔。

これはそれについてのトピックです

このプラグインは、プロジェクトのCM部分をDRYに保つのに役立ちます。

0
Andrii Khaisin

これを行う簡単な方法はありますか?

はい;

バージョン6以降、クラスパスのワイルドカードを使用できます。

javac -cp .;../lib/* yourJavaCodeDir/YourJavaFile.Java

こちらもご覧ください Q&A。

0