首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于任务的Gradle条件依赖关系

问基于任务的Gradle条件依赖关系
EN

Stack Overflow用户
提问于 2021-06-02 01:44:19
回答 1查看 35关注 0票数 0

我有一些与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)

理想情况下,解决方案应该是这样的,但对于我来说,任何可行的方案都可以

代码语言:javascript
复制
configurations {
    mysql.extendsFrom implementation
}
....

task buildMysql(type: ShadowJar) {
    archiveName = "jdbc-mysql.${extension}"
    from sourceSets.main.output
    configurations = [configurations.mysql]
}
EN

回答 1

Stack Overflow用户

发布于 2021-06-02 04:05:33

实际上,我似乎已经找到了一种可行的方法

首先,创建自定义配置和依赖项,如下所示:

代码语言:javascript
复制
configurations {
    mysql.extendsFrom runtimeClasspath
    // etc ...

    compileClasspath.extendsFrom(mysql, ...)
}

dependencies {
  implementation "com.example:example:1.0.0"
  mysql "mysql:mysql-connector-java:8.0.16"

}

然后是您的自定义构建任务

代码语言:javascript
复制
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
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67793698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档