【问题标题】:Gradle Conditional Dependencies based on Task基于任务的 Gradle 条件依赖
【发布时间】:2021-08-19 22:31:08
【问题描述】:

我有一些通用的 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]
}

【问题讨论】:

    标签: java gradle jdbc shadowjar


    【解决方案1】:

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

    首先,创建您的自定义配置和依赖项,例如:

    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
    }
    

    【讨论】:

      猜你喜欢
      • 2022-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      相关资源
      最近更新 更多