如何解决基于任务的 Gradle 条件依赖
我有一些通用的 jdbc 相关代码,我想将它们单独打包到一个可运行的 jar 中,其中已包含所需的 jdbc 库,因此每种数据库类型都有一个单独的可运行 jar。源码不变,但打包的jdbc jar会有所不同。
例如 jdbc-app-postgres.jar 将只包含 postgres jdbc jar,而 jdbc-app-MysqL.jar 将包含 MysqL jdbc jar。
是否可以使用 gradle 完成任务或其他任何操作?
似乎可以使用自定义 shadowJar 任务和自定义配置,但据我所知,自定义 shadow jar 任务无法正确获取包含的完整依赖项(例如:https://github.com/johnrengelman/shadow/issues/448 )
理想情况下,解决方案看起来像这样,但任何有效的东西对我来说都很好
configurations {
MysqL.extendsFrom implementation
}
....
task buildMysqL(type: ShadowJar) {
archiveName = "jdbc-MysqL.${extension}"
from sourceSets.main.output
configurations = [configurations.MysqL]
}
解决方法
我实际上似乎找到了一种可行的方法
首先,创建您的自定义配置和依赖项,例如:
configurations {
mysql.extendsFrom runtimeClasspath
// etc ...
compileClasspath.extendsFrom(mysql,...)
}
dependencies {
implementation "com.example:example:1.0.0"
mysql "mysql:mysql-connector-java:8.0.16"
}
然后是您的自定义构建任务
task buildMysql(type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar) {
archiveName = "jdbc-mysql.${extension}"
manifest {
attributes('Main-Class': 'com.example.App')
}
exclude('META-INF/INDEX.LIST','META-INF/*.SF','META-INF/*.DSA','META-INF/*.RSA','module-info.class')
configurations = [project.configurations.mysql]
from project.convention.getPlugin(JavaPluginConvention).sourceSets.main.output
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。