需求
需要做一个公共业务包,包里引用了一些第三方的jar(文件形式), 需要打一个整包给业务服务使用,让业务服务不用关注这些第三方的jar, 同时不要打包其他的像日志库之类的东西。
解决
修改jar任务:
jar {from {configurations.runtimeClasspath.findAll {//打包所有libs目录中的jar文件it.parent.equals(project.rootDir.path + '/libs') && it.name.endsWith(".jar")}.collect {println 'add ' + it.namezipTree(it)}}}
打包,报错了:
What went wrong:
Execution failed for task ‘:jar’.
Entry META-INF/spring.factories is a duplicate but no duplicate handling strategy has been set.
提示文件META-INF/spring.factories重复
spring.factories是启动类, 想了想,我把第三方包中的启动类写到了当前项目的spring.factories中,然后在from中指定排除相同的文件:
jar {from {duplicatesStrategy = DuplicatesStrategy.EXCLUDE....}}
再次打包:
BUILD SUCCESSFUL in 735ms