Gradle项目含依赖打包
今天打包Gradle项目时,得到的包是无依赖版本的,这不符合要求,于是找了一下解决方案。找到一个方案说是用shadow插件,如下:
plugins {
id 'java'
id 'com.github.johnrengelman.shadow' version '7.1.2'
}
group 'com.example'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
// 添加您的项目依赖项
// ...
}
jar {
manifest {
attributes 'Main-Class': 'com.example.main'
}
}
shadowJar {
mergeServiceFiles()
}
我试了下,确实可以,但是项目跑不起来,报错JCE cannot authenticate the provider BC
.
查了一下,发现原因在于:有些被依赖的jar包是会被验证签名的(比如某些加密算法的依赖包,为了安全所以需要签名以防假冒)。
我的项目正好用到了密码相关的包,所以会去验证签名。但把打出来的jar包解压发现shadow这个插件会将依赖包解压,对其中源码进行进一步处理,签名失效,所以报了错。
于是更换了打包方式,只需要添加spring的插件,交给spring打包即可:
plugins {
id 'java'
id "org.springframework.boot" version "2.5.2" // 在这里添加插件!!!
}
group 'com.example'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
// 添加您的项目依赖项
// ...
}
shadowJar {
mergeServiceFiles()
}