I am new to Flink and the days I used java was long ago. I am trying to write a Flink app that utilizes Table API with a source table used the MySQL CDC connector 3.3.0 to talk to a Postgres table using JDBC driver. I am using Gradle to build a shadowJar which I submit to my Flink containers by running ./bin/flink run <jar>.
I am getting this error: java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper at org.apache.flink.cdc.connectors.mysql.table.MySqlDeserializationConverterFactory.createStringConverter(MySqlDeserializationConverterFactory.java:72) at org.apache.flink.cdc.connectors.mysql.table.MySqlDeserializationConverterFactory.access$100(MySqlDeserializationConverterFactory.java:45) at org.apache.flink.cdc.connectors.mysql.table.MySqlDeserializationConverterFactory$1.createUserDefinedConverter(MySqlDeserializationConverterFactory.java:60) … Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) Environment: Java: OpenJDK 11.0.26 Flink 1.20 / Java 11 running on docker container locally Gradle 9 Flink MySQL Connector 3.3.0 MySQL Connector Java 8.0.33 After researching this issue and getting no results, I tried working with Copilot (for good or bad, not pertinent to this discussion) for several hours trying lots of things and not succeeding. To summarize things I have tried: * Initially I only had these lines in the gradle file: flinkShadowJar “org.apache.flink:flink-connector-mysql-cdc:3.3.0” flinkShadowJar “mysql:mysql-connector-java:8.0.33” fllinkShadowJar “com.fasterxml.jackson.core:Jackson-databind:2.12.7.1” flinkShadowJar “com.fasterxml.jackson.core:Jackson-core:2.12.7” flinkShadowJar “com.fasterxml.jackson.core:Jackson-annotations::2.12.7.1” * I have tried also adding those same lines but with the word implementation instead of shadowJar (so both kinds of references were in the gradle file) * I have tried various ways to manipulate the shadowjar trying to do things like: * Relocate com.fasterxml.jackson to org.apache.flink.cdc.connectors.mysql.shaded.com.fasterxml.jackson * Forcing resolution strategy * The shadowjar portion of my build.gradle looks like this now after trying lots of things: shadowJar { configurations = [project.configurations.flinkShadowJar] mergeServiceFiles() // Add this transformer to handle service files transform(com.github.jengelman.gradle.plugins.shadow.transformers.AppendingTransformer) { resource = 'META-INF/services/org.apache.flink.table.factories.Factory' } // // Add Java bytecode version check // transform(com.github.jengelman.gradle.plugins.shadow.transformers.ServiceFileTransformer) // Relocate Jackson to avoid conflicts // relocate 'com.fasterxml.jackson', 'org.apache.flink.cdc.connectors.mysql.shaded.com.fasterxml.jackson' manifest { attributes 'Implementation-Version': project.version, 'Build-Jdk-Spec': '11', 'Multi-Release': 'true' } // Exclude any META-INF files from dependencies that might cause conflicts exclude 'META-INF/*.SF' exclude 'META-INF/*.DSA' exclude 'META-INF/*.RSA' } // Add version constraints // configurations.all { // resolutionStrategy { // force 'com.fasterxml.jackson.core:jackson-databind:2.12.7.1' // force 'com.fasterxml.jackson.core:jackson-core:2.12.7' // force 'com.fasterxml.jackson.core:jackson-annotations:2.12.7' // } // } // Remove the version constraints section as we're handling it in dependencies configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> if (details.requested.group == 'com.fasterxml.jackson.core') { if (details.requested.name == 'jackson-databind') { details.useVersion '2.12.7.1' } else { details.useVersion '2.12.7' } } } } Last thing I want to mention: after all the changes I made, I made sure gradle build successfully. I examined the jar file by running this command: jar tvf build/libs/myapp-0.2-all.jar | grep -i Jackson amongst all the com/fasterxml/Jackson entries I did find: com/fasterxml/jackson/databind/ObjectReader.class Has anyone else ran into this issue and can offer advice on how to resolve it? [Graphical user interface, text Description automatically generated] +1 (316) 348.5461<tel:+13163485461> : office weavix.com<http://www.weavix.com/> Disclaimer The information contained in this communication from the sender is confidential. It is intended solely for use by the recipient and others authorized to receive it. If you are not the recipient, you are hereby notified that any disclosure, copying, distribution or taking action in relation of the contents of this information is strictly prohibited and may be unlawful. This email has been scanned for viruses and malware, and may have been automatically archived by Mimecast, a leader in email security and cyber resilience. Mimecast integrates email defenses with brand protection, security awareness training, web security, compliance and other essential capabilities. Mimecast helps protect large and small organizations from malicious activity, human error and technology failure; and to lead the movement toward building a more resilient world. To find out more, visit our website.