我的机器上有一些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