1

これはおそらく不可能ですが、念のために尋ねてみようと思いました。相対パスを使用して Java アプリを起動するバッチ ファイルがあります。すなわち。私は持っている:

アプリケーション\start.bat アプリケーション\lib*.jar

私のアプリケーションは、Application ディレクトリに構成ファイルを作成します。私のバッチ スクリプトは、相対パスを使用して lib ディレクトリ jars を指しています。プログラムを好きな場所に移動でき、実行するだけなので、これは私にとって非常にうまく機能しています。ただし、作業ディレクトリがアプリケーションに設定されているショートカットからだけでなく、コマンドラインからも同じアプリを呼び出せるようにしたいと考えています。問題は、コマンド ラインの任意のディレクトリからアプリケーションを呼び出せるようにしたいのですが、作業ディレクトリが異なるため、現時点では機能しません。

作業ディレクトリ用にアプリにいつでも別のパラメーターを追加できることはわかっていますが、その場合でも、アプリケーションへのハードコードされたパスを使用してバッチ スクリプトを作成する必要があります。たとえば、メインのJavaファイルが作業ディレクトリの上にあるディレクトリを取得するなど、Javaでこれを回避する方法はありますか? おそらくランチャーアプリはありますか?

アプリケーションと同じディレクトリに配置したい構成ファイルが作成されるため、アプリを jar としてバンドルできません。

4

2 に答える 2

3

start.batの現在のディレクトリを変更することを検討してください。

@cd /d %~dp0
java ...

これにより、スクリプトが配置されているフォルダーに変更されます。

pushd / popdコマンドを使用して、必要に応じてスクリプトを呼び出すための現在のディレクトリを保持することもできます。

またはgetClass().getProtectionDomain().getCodeSource().getLocation()、Javaからjar/classesへのパスを取得するために使用できます。

構成パスシステムプロパティを使用したパスに依存しないアプローチもあります。

java "-DconfigDir=%~dp0" ...
于 2012-09-28T13:09:58.680 に答える
0

すべての場合に機能する移植可能なソリューションはありません。実際、アプリケーション ディレクトリの概念は必ずしも意味がありません。たとえば、WebStart を使用して起動されたアプレットとアプリケーションを考えてみましょう。

-Dアプリケーションまたはインストール ディレクトリの概念が理にかなっている場合、それをサポートする最も簡単な方法は、アプリケーションのランチャー / 起動スクリプトでアプリケーション固有のプロパティを介してアプリケーションの Java コードに渡すことです。

于 2012-09-28T13:22:58.963 に答える