java - 创建自定义 gradle 任务来获取 mysql 架构

标签 java mysql gradle mysql-connector

我正在尝试编写一个自定义 Gradle 任务,该任务将从 .sql 文件中获取 mysql 创建和插入语句。这就是我的想法:-

task initdb() {
    def mysql = buildscript.configurations.classpath.find { it.toString().contains("mysql-connector-java") }
//    URLClassLoader loader = GroovyObject.class.classLoader

    def db = [url: "jdbc:mysql://127.0.0.1/",
              user: "root", password: "admin", driver: 'com.mysql.cj.jdbc.Driver']
    def sql = groovy.sql.Sql.newInstance(db.url, db.user, db.password, db.driver)
}

我收到一条错误消息,提示未找到驱动程序类。我在这里做错了什么?

最佳答案

Gradle 任务的类路径和项目的类路径不是一回事。 此外,Gradle 任务的配置和执行是两个不同的事情。

您需要以下内容:

buildscript {
    repositories {
        mavenCentral() // assuming your driver can be found there, if not, a custom repository
    }
    dependencies {
        // Add the driver, and its dependencies, to the buildscript classpath
        classpath "<driver dependency coordinates>"
    }
}

task initdb() {
    doLast {// Make sure the code is run during execution phase and not configuration phase
        def mysql = buildscript.configurations.classpath.find { it.toString().contains("mysql-connector-java") }
        //    URLClassLoader loader = GroovyObject.class.classLoader

        def db = [url: "jdbc:mysql://127.0.0.1/",
          user: "root", password: "admin", driver: 'com.mysql.cj.jdbc.Driver']
        def sql = groovy.sql.Sql.newInstance(db.url, db.user, db.password, db.driver)
    }
}

关于java - 创建自定义 gradle 任务来获取 mysql 架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60985911/

相关文章:

java - hibernate : SetMaxResults not working with java. util.Map

java - 这是合并排序的稳定实现吗

php - Mysql 在字段 : 中添加 NULL 值

react-native - 在模拟器 udara 上运行 React Native 项目时 spawnSync ./gradlew EACCES 错误

android - 错误:找不到符号类Android Studio

android - Google Play 游戏服务 + BaseGameUtils 添加到 Gradle 项目 = 包不存在

java - 如何在 Zip writer 中使用进度条?

Java 构造函数错误 : Constructor is defined, 未找到

PHP + SQL 语法因情况而异,没有意义

php - AES、MySql 和头痛