在自定义Gradle插件

时间:2017-03-29 14:04:00

标签: java mysql gradle groovy

我是Gradle的新手,所以任何提示,建议和答案都欢迎。

我的情况:我的任务是编写自定义Gradle插件,其中一部分是查询远程MySql数据库。我在Groovy / Java中编写代码,在标准的groovy项目中,它完美地运行。

但是,当我将代码迁移到插件时,除了无法建立数据库连接外,一切正常。

的build.gradle

// Apply plugins
apply plugin: 'groovy'
apply plugin: 'idea'
apply plugin: 'maven'
apply plugin: 'java'

// Repository
repositories {
    mavenCentral()
}

// Dependencies
dependencies {

    // Spock testing and specification framework
    testCompile 'org.spockframework:spock-core:1.0-groovy-2.4'
    testCompile 'junit:junit:4.12'

    compile gradleApi()

    // https://mvnrepository.com/artifact/org.codehaus.groovy/groovy-all
    compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.4.7'

    // https://mvnrepository.com/artifact/org.apache.commons/commons-compress
    compile group: 'org.apache.commons', name: 'commons-compress', version:    '1.13'

    // https://mvnrepository.com/artifact/org.tukaani/xz
    compile group: 'org.tukaani', name: 'xz', version: '1.6'

    // https://mvnrepository.com/artifact/mysql/mysql-connector-java
    compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.41'
    }

    group='com.scanImage'
    version = '1.0-SNAPSHOT'

    uploadArchives {
        repositories {
            mavenDeployer {
                repository(url: uri('../repo'))
            }
        }
    }

实施班

package com.scanImage.gradle

import org.gradle.api.Project
import org.gradle.api.Plugin

class runScanImage implements Plugin<Project> {
    void apply(Project target) {
        target.task('scan') << {
            def imageScan = new ScanImage('java', '/home/Paul/')
            imageScan.scanDockerImage()
        }
    }
}

ScanImage类调用方法进行连接

package com.scanImage.gradle

class ScanImage {



    // Start the scan process
    void scanDockerImage() {

        //Some other code...

        // Query the database
        def connection = new DBInterface()
        connection.connect()
        //connection.queryDB(jarList)
        //connection.closeDB()

    }

}

DBInterface类,用于建立数据库连接/查询db

package com.scanImage.gradle

/**
 * Created by Paul on 3/14/17.
 */
import java.sql.*

class DBInterface {

    Connection conn = null
    Statement stmt = null
    ResultSet rs = null

    void connect() {
        try {
            // Create database connection
            Class.forName("com.mysql.jdbc.Driver")
            conn = DriverManager.getConnection("jdbc:mysql://myDb", "myName", "myPassword")


            println("Connected to DB")
        } catch (SQLException ex) {
            println "No connection found!"
            System.out.println("SQLException: " + ex.getMessage());
            System.out.println("SQLState: " + ex.getSQLState());
            System.out.println("VendorError: " + ex.getErrorCode());
        }
    }

//some db queries...
}

我&#34; gradle clean build&#34;和&#34; gradle uploadArchives&#34;创建插件jar等然后&#34; gradle scan&#34;从用户角度执行插件功能。

用户build.gradle类来执行插件功能。

buildscript {
    repositories {
        mavenCentral()
        maven {
            url uri('../repo')
        }
    }
    dependencies {
        classpath group:'com.scanImage', name: 'runScanImage',
                version: '1.0-SNAPSHOT'
    }
}
apply plugin: 'scanImage'

插件正确编译和构建,并在尝试建立数据库连接之前执行所有功能。当我执行&#34; gradle scan -S&#34;从用户的角度来看,我收到以下错误:

No connection found!
SQLException: No suitable driver found for jdbc:mysql://myDb
SQLState: 08001
VendorError: 0

我尽可能彻底地搜索堆栈溢出(也许我没有问正确的问题)并试图对(有点)类似问题实施各种修复,但找不到与我匹配的确切实例。 / p>

任何帮助都非常感激。

0 个答案:

没有答案