gradle mysql依赖_Gradle打可运行Jar包(包含依赖第三方库中的类)

本文介绍了如何使用Gradle构建工具,分别创建包含所有依赖的fat jar和仅包含自身代码的jar包,以及解决在打包过程中类重复的问题。通过设置参数控制是否将依赖类打包进jar,确保在需要单个jar或tar包时能灵活满足需求,同时避免了类的重复出现。
摘要由CSDN通过智能技术生成

使用Gradle来打Jar包,在引入Gradle的java插件后,直接就能实现

在build.gradle文件中引入java插件

plugins {

id 'java'

}

然后配置maifest主类

jar {

manifest {

attributes "Main-Class": "cn.buddie.GradleTest"

}

}

最后执行jar任务就能打出来jar包了

gradle jar

但这样,打出来的Jar包中,只包含了自己编写的代码编译成的Class文件。其它依赖的Jar包中的类,不在其中。

解决方式有两种。

一种是引用application插件,通过distTar或distZip打包。这样生成的包里不仅包含了自己项目中写的源码编辑成的jar包,还包括gradle中配置依赖的jar包,同时还生成了shell和bat脚本,通过脚本,可以直接运行我们的程序。

另一种,是在打jar包,直接依赖的第三方类库中的类,一起打包到我们的jar中。

具体如下:

jar {

manifestContentCharset 'utf-8'

metadataCharset 'utf-8'

manifest {

attributes "Main-Class": "cn.buddie.GradleTest"

}

from {

configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }

}

}

这样打出来的jar包,可以使用java -jar的方式运行

java -jar myapp.jar

如果领导说,你即需要提供单个的jar,又需要提供tar包,怎么办呢?因为修改了task jar,而task distTar是依赖于task jar。这样的后果就是打出来的tar包中,已经包含了所有你依赖的第三方jar包,同时,你自己项目打出的jar包中,又包含了这些第三方jar包中的类。也就是所有第三方的类,都double了!

我这里最终成功的解决方案为:增加参数,让task jar根据参数来决定是否将第三方依赖类打入自己的jar包。

jar {

manifestContentCharset 'utf-8'

metadataCharset 'utf-8'

manifest {

attributes "Main-Class": "cn.buddie.GradleTest"

}

if (project.hasProperty("allInOne")) {

from {

configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }

}

}

}

这里增加了一个“allInOne”的参数,如果不指定参数,就不会将第三方依赖类打入jar包。这样在执行task distTar时,不指定参数,打出来的tar中,第三方依赖类就只有一份。

而在需要所有类在一个Jar包中的Jar文件时,可以使用参数打包

gradle jar -PallInOne

这样不管领导要什么包,都可以在不做任何改动的情况下,满足领导的需求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值