如何在 JRuby Gradle 项目中避免 "cannot load Java class oracle.jdbc.OracleDriver"?
How to avoid "cannot load Java class oracle.jdbc.OracleDriver" in a JRuby Gradle project?
当试图在我的 JRuby Gradle 项目中包含 Oracle JDBC 驱动程序 (ojdbc7.jar) 时,我总是在 运行 时得到一个 "cannot load Java class oracle.jdbc.OracleDriver" .这是我的基本 build.gradle:
buildscript {
repositories { jcenter() }
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:[1.2.2,2.0)'
classpath 'com.github.jruby-gradle:jruby-gradle-plugin:%%VERSION%%'
classpath 'com.github.jruby-gradle:jruby-gradle-jar-plugin:1.3.3'
}
}
apply plugin: "com.github.jruby-gradle.jar"
repositories { jcenter() }
dependencies {
jrubyJar "rubygems:colorize:0.7.7+"
jrubyJar 'org.slf4j:slf4j-simple:1.7.12'
}
jrubyJar {
initScript "${projectDir}/entrypoint.rb"
}
这是我的 entrypoint.rb:
require 'java'
java_import 'java.sql.DriverManager'
java_import 'oracle.jdbc.OracleDriver'
puts "Hello world"
构建输出 + 运行 步骤:
frank$ ./gradlew jrubyJar
:prepareJRubyJar UP-TO-DATE
:jrubyJar UP-TO-DATE
BUILD SUCCESSFUL
Total time: 2.027 secs
frank$ java -jar build/libs/plsql-unit-tester-jruby.jar
NameError: cannot load Java class oracle.jdbc.OracleDriver
...
按照 中的建议,我尝试将其添加到我的 build.gradle:
dependencies {
compile files('lib/ojdbc7.jar')
}
但这会导致编译时出错:
Could not find method compile() for arguments [file collection] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
然后我尝试按照 How to add OJDBC6.jar in build.gradle file?:
中的建议将其添加为 运行时间依赖项
dependencies {
runtime files('lib/odjbc7.jar')
}
但这又引发了一个编译错误:
Could not find method runtime() for arguments [file collection] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
所以我被卡住了 - 如何正确添加 odjbc7.jar(或任何外部 jar)作为我的 JRuby Gradle 项目的依赖项?
该问题的解决方法是将 Oracle JDBC 驱动程序安装到本地 Maven 存储库中,并将 mavenLocal() 添加为存储库并将驱动程序 jar 添加为附加依赖项。
驱动可以这样安装:
mvn install:install-file -Dfile=ojdbc7.jar -DgroupId=com.oracle -DartifactId=ojdbc7 -Dversion=12.1.0.2 -Dpackaging=jar
最后的 build.gradle 看起来像这样:
buildscript {
repositories { jcenter() }
dependencies {
classpath 'com.github.jruby-gradle:jruby-gradle-plugin:1.3.3'
classpath 'com.github.jruby-gradle:jruby-gradle-jar-plugin:1.3.3'
}
}
apply plugin: "com.github.jruby-gradle.jar"
repositories {
mavenLocal()
jcenter()
}
dependencies {
jrubyJar "rubygems:colorize:0.7.7+"
jrubyJar 'org.slf4j:slf4j-simple:1.7.12'
jrubyJar 'com.oracle:ojdbc7:12.1.0.2'
}
jrubyJar {
initScript "${projectDir}/entrypoint.rb"
}
当试图在我的 JRuby Gradle 项目中包含 Oracle JDBC 驱动程序 (ojdbc7.jar) 时,我总是在 运行 时得到一个 "cannot load Java class oracle.jdbc.OracleDriver" .这是我的基本 build.gradle:
buildscript {
repositories { jcenter() }
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:[1.2.2,2.0)'
classpath 'com.github.jruby-gradle:jruby-gradle-plugin:%%VERSION%%'
classpath 'com.github.jruby-gradle:jruby-gradle-jar-plugin:1.3.3'
}
}
apply plugin: "com.github.jruby-gradle.jar"
repositories { jcenter() }
dependencies {
jrubyJar "rubygems:colorize:0.7.7+"
jrubyJar 'org.slf4j:slf4j-simple:1.7.12'
}
jrubyJar {
initScript "${projectDir}/entrypoint.rb"
}
这是我的 entrypoint.rb:
require 'java'
java_import 'java.sql.DriverManager'
java_import 'oracle.jdbc.OracleDriver'
puts "Hello world"
构建输出 + 运行 步骤:
frank$ ./gradlew jrubyJar
:prepareJRubyJar UP-TO-DATE
:jrubyJar UP-TO-DATE
BUILD SUCCESSFUL
Total time: 2.027 secs
frank$ java -jar build/libs/plsql-unit-tester-jruby.jar
NameError: cannot load Java class oracle.jdbc.OracleDriver
...
按照
dependencies {
compile files('lib/ojdbc7.jar')
}
但这会导致编译时出错:
Could not find method compile() for arguments [file collection] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
然后我尝试按照 How to add OJDBC6.jar in build.gradle file?:
中的建议将其添加为 运行时间依赖项 dependencies {
runtime files('lib/odjbc7.jar')
}
但这又引发了一个编译错误:
Could not find method runtime() for arguments [file collection] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
所以我被卡住了 - 如何正确添加 odjbc7.jar(或任何外部 jar)作为我的 JRuby Gradle 项目的依赖项?
该问题的解决方法是将 Oracle JDBC 驱动程序安装到本地 Maven 存储库中,并将 mavenLocal() 添加为存储库并将驱动程序 jar 添加为附加依赖项。
驱动可以这样安装:
mvn install:install-file -Dfile=ojdbc7.jar -DgroupId=com.oracle -DartifactId=ojdbc7 -Dversion=12.1.0.2 -Dpackaging=jar
最后的 build.gradle 看起来像这样:
buildscript {
repositories { jcenter() }
dependencies {
classpath 'com.github.jruby-gradle:jruby-gradle-plugin:1.3.3'
classpath 'com.github.jruby-gradle:jruby-gradle-jar-plugin:1.3.3'
}
}
apply plugin: "com.github.jruby-gradle.jar"
repositories {
mavenLocal()
jcenter()
}
dependencies {
jrubyJar "rubygems:colorize:0.7.7+"
jrubyJar 'org.slf4j:slf4j-simple:1.7.12'
jrubyJar 'com.oracle:ojdbc7:12.1.0.2'
}
jrubyJar {
initScript "${projectDir}/entrypoint.rb"
}