我是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>
任何帮助都非常感激。