Issue
After upgrading to Java JDK 11 jobs executing Groovy code which were reliying on installed extensions (JAR files in the lib/ext directory of the Java Runtime Environment) are failing with java.lang.ClassNotFoundException.
Example:
import groovy.sql.Sql def driver = "com.mysql.cj.jdbc.Driver" def user = "sample_user" def password = "sample_password" def url = "jdbc:mysql://sample-host.com" def db = Sql.newInstance(url, user, password, driver)
It throws a java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver exeception.
Explanation
The lib/ext directory was removed starting in JDK 9, and the presence of this directory will force java or javac executables to exit. Check Java Platform, Standard Edition Oracle JDK 9 Migration Guide: Removed Extension Mechanism for more details about it.
Resolution
| This process is unsupported, and if any issues are caused by doing this we will ask you to revert this change before we can escalate the issue to engineering. The correct solution to solve this problem is to integrate this into a Jenkins plugin. |
You now need to add any third-party JAR files to the application’s classpath:
-
The build classpath if there are compile time dependencies
-
The runtime classpath if there are runtime dependencies