微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

基于任务的 Gradle 条件依赖

如何解决基于任务的 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?