使用 jenkins 触发时测试脚本失败,给出 java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误消息
test script fails when triggered using jenkins gives java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver error message
我在 Intellij 中的 gradle 项目中添加了一个 ojdbc14 jar 文件,我的测试脚本包括数据库验证 运行 在使用 [=22] 触发测试用例时很好=] Intellij 中的选项。但是当使用 jenkins 通过 CI 触发时,相同的测试脚本失败并给我以下错误
Feature: 3D secure code scenarios
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
at java.net.URLClassLoader.run(URLClassLoader.java:366)
at java.net.URLClassLoader.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:190)
at util.OracleDBService.createDriver(OracleDBService.java:88)
at util.OracleDBService.openConnection(OracleDBService.java:56)
at util.OracleDBService.executeQuery(OracleDBService.java:13)
at pages.DBListOfQuery.getOrderStatusFromDB(DBListOfQuery.java:67)
at steps.FlowScenarioSteps.verify_the_order_placed_for_order_id_and_validate_order_xml(FlowScenarioSteps.java:226)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at cucumber.runtime.Utils.call(Utils.java:34)
at cucumber.runtime.Timeout.timeout(Timeout.java:13)
at cucumber.runtime.Utils.invoke(Utils.java:30)
我的 project.iml 文件包括 jdbc 库
<library>
<CLASSES>
<root url="jar://$USER_HOME$/Downloads/ojdbc14.jar/ojdbc14.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
这是因为Jenkins
对ojdbc14.jar
一无所知。当 Jenkins
在这个例子中触发作业想要编译项目,测试一些 类 等等,它必须知道提供的库。
我不知道 Jenkins
在您的公司或本地计算机上是如何配置的,但您需要手动将此 ojdbc14.jar
添加到其本地存储库。例如,本地存储库可以由 maven
或 gradle
.
处理
所以在这种情况下,您需要配置 Jenkins
以使用 gradle
并将 ojdbc14.jar
添加到 gradle
本地存储库。
我在 Intellij 中的 gradle 项目中添加了一个 ojdbc14 jar 文件,我的测试脚本包括数据库验证 运行 在使用 [=22] 触发测试用例时很好=] Intellij 中的选项。但是当使用 jenkins 通过 CI 触发时,相同的测试脚本失败并给我以下错误
Feature: 3D secure code scenarios
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
at java.net.URLClassLoader.run(URLClassLoader.java:366)
at java.net.URLClassLoader.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:190)
at util.OracleDBService.createDriver(OracleDBService.java:88)
at util.OracleDBService.openConnection(OracleDBService.java:56)
at util.OracleDBService.executeQuery(OracleDBService.java:13)
at pages.DBListOfQuery.getOrderStatusFromDB(DBListOfQuery.java:67)
at steps.FlowScenarioSteps.verify_the_order_placed_for_order_id_and_validate_order_xml(FlowScenarioSteps.java:226)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at cucumber.runtime.Utils.call(Utils.java:34)
at cucumber.runtime.Timeout.timeout(Timeout.java:13)
at cucumber.runtime.Utils.invoke(Utils.java:30)
我的 project.iml 文件包括 jdbc 库
<library>
<CLASSES>
<root url="jar://$USER_HOME$/Downloads/ojdbc14.jar/ojdbc14.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
这是因为Jenkins
对ojdbc14.jar
一无所知。当 Jenkins
在这个例子中触发作业想要编译项目,测试一些 类 等等,它必须知道提供的库。
我不知道 Jenkins
在您的公司或本地计算机上是如何配置的,但您需要手动将此 ojdbc14.jar
添加到其本地存储库。例如,本地存储库可以由 maven
或 gradle
.
所以在这种情况下,您需要配置 Jenkins
以使用 gradle
并将 ojdbc14.jar
添加到 gradle
本地存储库。