当前位置: 首页 > 知识库问答 >
问题:

基于任务的Gradle条件依赖

卓瀚
2023-03-14

我有一些与jdbc相关的通用代码,我想单独打包到一个可运行的jar中,其中已经包含了所需的jdbc库,因此每个数据库类型都有一个单独的可运行jar。源代码将保持不变,但打包的jdbc jar将不同。

例如jdbc app postgres。jar将只包含postgres jdbc jar,而jdbc应用程序mysql。jar将包含mysql jdbc jar。

是否可以使用gradle对任务或任何其他内容执行此操作?

似乎它应该可以与自定义影子罐任务和自定义配置,但据我所知,自定义影子罐任务无法正确工作,包括完整的依赖项(例如: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]
}

共有1个答案

东方淇
2023-03-14

实际上我似乎找到了一个有效的方法

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

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
}
 类似资料:
  • 我有两个互斥的任务,它们都应该在完成后启动。 我提到它们是互斥的,因为我不想让< code>bootRun依赖于它们中的任何一个。相反,我在寻找一个类似如下的流程: 我尝试了以下方法, 因此,将启动设置()和bootRun(与的类似设置)。这会导致在项目'中找不到路径'bootRun'的 我还尝试将A/B任务声明为:< code > task A(type:org . spring framewo

  • 我有一个基于java的gradle插件,可以为我们的gradle项目进行一些常见的配置。现在,我想添加以下任务(当前存在于每个项目的build.gradle中) 我需要的是关于如何在基于java的gradle插件中执行此操作的提示。 在另一个插件中,我已经使用项目注册了任务。getTasks()。创建(“myTask”,myTask.class) 我试图谷歌的解决方案,但到目前为止,我没有找到一个

  • 问题内容: 可以运行以了解模块任务的依赖性。有没有办法找到 buildscript依赖 的 传递依赖 ? 示例: 直接取决于: 可以在MVNRepository上看到。但是,这些工件有其自己的依赖性。有没有找到方法而无需手动遍历整个依赖树的方法? 为了澄清起见,我正在谈论的类路径由以下方式定义: 问题答案: 您可以使用以下命令: Udacity提供了很棒的Android Gradle 教程,但是您

  • 根据我的理解,clean现在将调用clearVersionProperties,war将调用WriteVersionProperties。 但当我执行分级清洁时,Reactor计划看起来是这样的: 为什么要执行clearVersionProperties和writeVersionProperties任务,因为它们绑定到某些构建阶段?例如,不执行任务infoEnv,而是执行任务writeVersio

  • 嗨,如果我用任务列出所有任务--我看到所有导入的ant任务,但是当我试图创建依赖于ant任务的任务时,我得到的是“Could not determine the dependencies of task':testgradle'”。 出现问题的行:-它显然看不到ant init任务。 我做错了什么? 所有编译-编译主源树java文件 byWorld5 copyTestConfiguration-复

  • 因此,自从添加新的Room android架构库以来,这种情况已经开始发生。我在AppDatabase_Impl没有过期时遇到问题,我通过在注释中添加kapt来修复它: < li>Android Room持久性库和Kotlin < li >在Kotlin中实现房间持久性库 < in Kotlin中的房间持久性库实现(Gradle错误) 我怀疑其他错误是由于AS、Kotlin和Java 8造成的,所