gradle配置
在module的build.gradle文件末尾加入以下代码:
task deleteOldJar(type: org.gradle.api.tasks.Delete){
//删除存在的
delete'build/libs/getChannel.jar'
}
task makeJar(type: Jar){
//指定生成的jar名
baseName'getChannel'
//设置拷贝的文件
from('build/classes/java/main')
from (project.zipTree("libs/java-json.jar"))//java-json.jar作为源码添加到jar中
//去掉不需要打包的目录和文件
exclude('BuildConfig.class','R.class')
//去掉R$开头的文件
exclude{it.name.startsWith('R$')}
}
makeJar.dependsOn(deleteOldJar,build)
jar包中引入第三方jar包
之前使用常规打包方式,遇到运行问题:
Exception in thread "main" java.lang.NoClassDefFoundError
可通过from方法解决。
具体方法:
1、将jar包至于libs目录下
2、build.gradle文件中加入from (project.zipTree("libs/java-json.jar"))
此时,编译出来的jar文件中就存在第三方的代码了
编译
在gradle侧边栏中找到makeJar并双击运行
正常运行,并无错误情况下,会在module/build/libs文件目录下生产jar包,getChannel.jar就是我们需要的jar文件。
此时,jar包还不是我们最终需要的可执行jar包,还需经过一下操作。
jar包转为可执行jar包
1、解压jar包
2、修改META-INF\MANIFEST.MF文件
打开MANIFEST.MF文件,原始内容为:
Manifest-Version: 1.0
设置代码入口:
Manifest-Version: 1.0
Main-Class: com.haowan.lib.MyClass
3、在jar解压后的文件夹下 按shift+鼠标右键 选择:在此处打开命令窗口 ,或在文件路径中输入cmd回车,在cmd中执行如下命:
jar -cvmf META-INF\MANIFEST.MF test.jar ./
命令执行完毕后,会在当前目录中生成一个test.jar文件,这就是我们最终得到的可执行jar包
运行可执行jar包
java -jar F:\JOY\project\HgFenXiao\lib\build\libs\getChannel\test.jar p1 p2
通过java -jar方式运行指定的jar包,p1、p2为传入的参数。
java中接收方式也很简单:
public static void main(String[] args) {
String p1 = args[0]
String p2 = args[1]
...
}