应用背景
问题的解决来源于问题的产生,今天就遇到了这样的问题:在linux环境下without IDE,做图像修复填充方面的工作,从github上clone了一个项目patchMatch(java source code)。通过命令javac编译和java运行,但是这样需要每次更改参数,又重新编译source code,太麻烦了。于是,我就想:能不能将source code编译成.class文件,打包成带参数的jar文件,在命令行运行jar,指定参数。像如下图所示执行一样:
$java -jar XXX.jar -param1 paramValue1 -param2 paramValue2 -param3 paramValue3
这样的话,就不用每次去更改source code的参数再编译了,只需要一次编译打包成jar,命令行里指定不同的参数就可以了,岂不是很方便,嘿嘿嘿......你还觉得麻烦的话,可以写shell脚本,把这些繁琐的命令行操作写在一起,执行shell脚本就可以了。
申明:我浏览了网络中相关问题的处理办法是:借助像eclipse的IDE,用maven插件或者Ant插件来打包jar解决问题。那么像我只运行一次java code,还去在linux下安装IDE,插件maven,岂不是划不来。所以我单纯只用java中jar命令。
文件说明
首先我列出我的文件结构,方便理解。看下source file有4个java文件:PatchMatchMain.java ; Inpaint.java ; NNF.java ; MaskedImage.java.
./lib/commons-cli-1.4.jar是我自己创建的文件夹(后面有用),放进去的第三方包:包括了命令行参数包装和解析的函数,带参数的jar必须要导入这个包,我给出下载地址:http://commons.apache.org/proper/commons-cli/download_cli.cgi,下载Commons-cli-1.4-bin.tar.gz,解压就有commons-cli-1.4.jar这个包了
其中文件的调用顺序为PatchMatchMain(主入口,要导入commons-cli-1.4.jar) 调用 Inpaint,Inpaint调用NNF和MaskedImage,NNF调用MashedImage。
实现步骤
先来明确下操作步骤:
- 首先我应该把source file的主入口PatchMatchMain.java添加带参数并且能解析的部分;
- 把所有的.java编译成.class文件,编译过程引入了外部包需要指定外部包的位置;
- 用jar命令把编译好的.class文件打包成jar文件,需要手动编写清单文件MANIFEST.MF指定程序主入口和外部包位置(因为我们没有用IDE和maven插件)
- java -jar运行打包好的带参数的jar
1.添加带参数并且能解析的部分
首先导入需要的包: