我有一些与jdbc相关的通用代码,我希望将它们单独打包到一个已包含所需jdbc库的可运行jar中,因此每个数据库类型都有一个单独的可运行jar。源代码将保持不变,但打包的jdbc jar将有所不同。
例如,jdbc-app-postgres.jar将只包含postgres jdbc jar,而jdbc-app-mysql.jar将包含mysql jdbc jar。
有没有可能使用gradle通过任务或其他任何东西来实现这一点?
似乎可以使用定制的shadowJar任务和定制的配置,但据我所知,定制的影子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]
}发布于 2021-06-02 04:05:33
实际上,我似乎已经找到了一种可行的方法
首先,创建自定义配置和依赖项,如下所示:
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
}https://stackoverflow.com/questions/67793698
复制相似问题