私はマシン上にコマンドラインから実行するJavaコードをいくつか持っています。このコードから実行可能な.jar
ファイルを作成して、アプリケーションをより簡単に配布できるようにします。Javaコードを含む複数のフォルダを実行可能なjarファイルに変換します。
コードは、fol_a
,fol_b
,fol_c
、およびfol_d
という4つのフォルダにあります。これらのファイルのそれぞれには、.class
ファイルを含む/bin
サブフォルダが含まれており、そのうちの2つ(fol_a
およびfol_b
)には/lib
フォルダが含まれており、コードに必要なファイル数は.jar
です。
fol_d
にはというパッケージ内にあるDemo
という実行クラスが含まれています。クラスへのフルパスが
fol_d/bin/machineLearning/Demo
次のように私は現在、コマンドラインからコードを実行される:<param_5>
へ
$ cd fol_d/bin
$ java -cp ".:../../fol_a/bin:../../fol_a/lib/*:../../fol_b/bin:../../fol_b/lib/*:../../fol_c/bin" machineLearning.Demo <param_1> <param_2> ... <param_5>
どこ<param_1>
はDemo
でMain
メソッドに与えられた引数です。私が欲しいもの
が正常Demo
を実行する必要があるすべてのコード、すなわち、fol_d
通じfol_a
のコードが含まれている1つの.jar
ファイルを作成することです。私はこの.jar
ファイルをコマンドラインから実行して、のMain
メソッドに行く引数を与えたいと考えています。このようなもの:
$ java -jar MyApplication.jar <param_1> ... <param_5>
これは可能ですか?どうすればいい?私はオンラインで答えを見つけようとしていますが、情報の量が私を混乱させます。
更新日
右!実行するためのメインクラスを指定manifest.txtファイルを作るだけでなく、myapp
- 新しいディレクトリへ
bin
ディレクトリの内容をコピーします。だから、私が行うために必要なすべてが、これがされたようですクラスパス - 瓶
myapp
:$ jar cmf manifest.txt myapp.jar -C myapp/ .
- jarファイルを実行します。
$ java -jar myapp.jar <arg_1> <arg_2> ... <arg_n>
私はこれを試してみてくださいする前に - '男cp'は私を通知します。cpユーティリティの 「歴史のバージョンでは、-rオプションを持っていたこの実装は、そのオプションをサポートしますが、正しくコピーされません。しかし、その使用は強く、お勧めできません。特別なファイル、シンボリックリンク、またはfifoのものです。 " 私はこれについて心配すべきですか? – rdv
代わりに-Rを使用してください。 –
私はあなたを正しく理解しているかわかりません。私がしたことは、(1)私の4つの 'fol_'フォルダを別のフォルダ(' my_app')に入れ、(2) 'my_app'を含むフォルダにcdし、(3)そのフォルダに' manifest ( 'Main-Class:fol_d/bin/machineLearning.Demo')と(4)' jar cfm my_app.jar manifest.txt my_app'を実行します。ここまでは順調ですね。しかし、 'java -jar my_app.jar'で' my_app.jar'を実行しようとすると、 'Error:メインクラスfol_d.bin.machineLearning.Demoが見つからないかロードできませんでした。 – rdv