我的機器上有一些Java代碼,我從命令行運行。我想從此代碼創建一個可運行的.jar
文件,以便我可以更輕鬆地分發我的應用程序。用Java代碼將多個文件夾轉換爲可運行的jar文件
的代碼在四個文件夾,名爲fol_a
,fol_b
,fol_c
和fol_d
。其中每個包含一個/bin
子文件夾,其中包含.class
文件,其中兩個文件夾(fol_a
和fol_b
)也包含一個/lib
文件夾,其中包含代碼所需的一些.jar
文件。
fol_d
包含要運行的類Demo
,它位於名爲machineLearning
的包中。到類的完整路徑是
fol_d/bin/machineLearning/Demo
我目前從命令行運行代碼如下:
$ 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>
<param_5>
到在Demo
給予Main
方法的參數。
我想是創建一個單一的.jar
文件包含所有必要通過fol_d
成功執行Demo
,即在fol_a
代碼的代碼。然後,我希望能夠從命令行運行此.jar
文件,併爲其提供參數Demo
中的Main
方法。就像這樣:
$ java -jar MyApplication.jar <param_1> ... <param_5>
這可能嗎?我將如何做到這一點?我一直在努力在網上找到答案,但信息量混淆了我。
UPDATE
對!如此看來,所有我需要做的是這樣的:
- 的
bin
目錄的內容複製到一個新的目錄myapp
- 做出manifest.txt文件,指定主類運行,以及類路徑
- 罐子
myapp
:$ jar cmf manifest.txt myapp.jar -C myapp/ .
- 執行的jar:
$ java -jar myapp.jar <arg_1> <arg_2> ... <arg_n>
在我嘗試之前 - 'man cp'通知我: 「cp實用程序的歷史版本有一個-r選項,該實現支持該選項;但是強烈建議不要使用它,因爲它沒有正確複製特殊文件,符號鏈接或fifo「。 我應該擔心這個嗎? – rdv
改爲使用-R。 –
不知道我是否正確理解你。我做的是(1)將我的四個'fol_'文件夾放入另一個文件夾('my_app'),(2)cd到包含'my_app'的文件夾中,(3)在該文件夾中創建一個文件'manifest .txt'只包含一行('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'時,我得到'錯誤:無法找到或加載主類fol_d.bin.machineLearning.Demo'。 – rdv