Can we improve the Flink experience here by adding this dependency directly to the cassandra connector pom.xml (so that user jars always pull it in via transitivity)?
On Wed, Mar 15, 2017 at 4:09 PM, Nico <nico.franz...@gmail.com> wrote: > Hi @all, > > I came back to this issue today... > > @Robert: > "com/codahale/metrics/Metric" class was not available in the user code > jar > > Even after adding the metric class into the build-jar profile of the pom > file, more "class not found" errors occur. So the only solution was to add > the whole dependency: > > <dependency> > <groupId>com.codahale.metrics</groupId> > <artifactId>metrics-core</artifactId> > <version>3.0.2</version> > </dependency> > > > This worked for me. > > Best, > Nico > > > > 2017-03-06 11:46 GMT+01:00 Chesnay Schepler <ches...@apache.org>: > >> Hello, >> >> i believe the cassandra connector is not shading it's dependencies >> properly. This didn't cause issues in the >> past since flink used to have a dependency on codahale metrics as well. >> >> Please open a JIRA for this issue. >> >> Regards, >> Chesnay >> >> >> On 06.03.2017 11:32, Tarandeep Singh wrote: >> >> Hi Robert & Nico, >> >> I am facing the same problem (java.lang.NoClassDefFoundError: >> com/codahale/metrics/Metric) >> Can you help me identify shading issue in pom.xml file. >> >> My pom.xml content- >> --------------------------------------------- >> >> <project xmlns="http://maven.apache.org/POM/4.0.0" >> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 >> http://maven.apache.org/xsd/maven-4.0.0.xsd"> >> <modelVersion>4.0.0</modelVersion> <groupId>rfk-dataplatform</groupId> >> <artifactId>stream-processing</artifactId> <version>0.1.0</version> >> <packaging>jar</packaging> <name>Stream processing</name> <properties> >> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> >> <flink.version>1.2.0</flink.version> >> <slf4j.version>1.7.7</slf4j.version> >> <log4j.version>1.2.17</log4j.version> </properties> <dependencies> >> <dependency> <groupId>org.apache.flink</groupId> >> <artifactId>flink-streaming-java_2.10</artifactId> >> <version>${flink.version}</version> </dependency> <dependency> >> <groupId>org.apache.flink</groupId> >> <artifactId>flink-clients_2.10</artifactId> >> <version>${flink.version}</version> </dependency> <dependency> >> <groupId>org.apache.flink</groupId> >> <artifactId>flink-connector-cassandra_2.10</artifactId> >> <version>1.2.0</version> </dependency> <dependency> >> <groupId>org.apache.flink</groupId> >> <artifactId>flink-statebackend-rocksdb_2.10</artifactId> >> <version>1.2.0</version> </dependency> <dependency> >> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> >> <version>${slf4j.version}</version> </dependency> >> <dependency> <groupId>log4j</groupId> >> <artifactId>log4j</artifactId> <version>${log4j.version}</version> >> </dependency> <dependency> >> <groupId>org.apache.avro</groupId> <artifactId>avro</artifactId> >> <version>1.8.1</version> </dependency> <dependency> >> <groupId>org.testng</groupId> >> <artifactId>testng</artifactId> <version>6.8</version> >> <scope>test</scope> </dependency> <!-- flink kafka connector >> --> <dependency> <groupId>org.apache.flink</groupId> >> <artifactId>flink-connector-kafka-0.8_2.10</artifactId> >> <version>1.2.0</version> </dependency> <!-- java influxdb >> client --> <dependency> <groupId>org.influxdb</groupId> >> <artifactId>influxdb-java</artifactId> >> <version>2.5</version> </dependency> </dependencies> <profiles> >> <profile> <!-- Profile for packaging correct JAR files --> >> <id>build-jar</id> <activation> >> <activeByDefault>false</activeByDefault> </activation> >> <dependencies> <dependency> >> <groupId>org.apache.flink</groupId> >> <artifactId>flink-java</artifactId> >> <version>${flink.version}</version> <scope>provided</scope> >> </dependency> <dependency> >> <groupId>org.apache.flink</groupId> >> <artifactId>flink-streaming-java_2.10</artifactId> >> <version>${flink.version}</version> <scope>provided</scope> >> </dependency> <dependency> >> <groupId>org.apache.flink</groupId> >> <artifactId>flink-clients_2.10</artifactId> >> <version>${flink.version}</version> <scope>provided</scope> >> </dependency> <dependency> >> <groupId>org.slf4j</groupId> >> <artifactId>slf4j-log4j12</artifactId> >> <version>${slf4j.version}</version> <scope>provided</scope> >> </dependency> <dependency> >> <groupId>log4j</groupId> <artifactId>log4j</artifactId> >> <version>${log4j.version}</version> >> <scope>provided</scope> </dependency> </dependencies> >> <build> <plugins> <!-- disable the exclusion >> rules --> <plugin> >> <groupId>org.apache.maven.plugins</groupId> >> <artifactId>maven-shade-plugin</artifactId> >> <version>2.4.1</version> <executions> >> <execution> <phase>package</phase> >> <goals> <goal>shade</goal> >> </goals> <configuration> >> <artifactSet> <excludes >> combine.self="override"></excludes> </artifactSet> >> </configuration> </execution> >> </executions> </plugin> </plugins> >> </build> </profile> </profiles> <build> <plugins> >> <plugin> <groupId>org.apache.maven.plugins</groupId> >> <artifactId>maven-shade-plugin</artifactId> >> <version>2.4.1</version> <executions> <!-- Run >> shade goal on package phase --> <execution> >> <phase>package</phase> <goals> >> <goal>shade</goal> </goals> >> <configuration> <artifactSet> >> <excludes> <!-- This list contains all >> dependencies of flink-dist Everything else will be >> packaged into the fat-jar --> >> <exclude>org.apache.flink:flink-annotations</exclude> >> <exclude>org.apache.flink:flink-shaded-hadoop2</exclude> >> >> <exclude>org.apache.flink:flink-shaded-curator-recipes</exclude> >> <exclude>org.apache.flink:flink-core</exclude> >> <exclude>org.apache.flink:flink-java</exclude> >> <exclude>org.apache.flink:flink-scala_2.10</exclude> >> <exclude>org.apache.flink:flink-runtime_2.10</exclude> >> <exclude>org.apache.flink:flink-optimizer_2.10</exclude> >> <exclude>org.apache.flink:flink-clients_2.10</exclude> >> <exclude>org.apache.flink:flink-avro_2.10</exclude> >> >> <exclude>org.apache.flink:flink-examples-batch_2.10</exclude> >> <exclude>org.apache.flink:flink-examples-streaming_2.10</exclude> >> >> <exclude>org.apache.flink:flink-streaming-java_2.10</exclude> >> <exclude>org.apache.flink:flink-streaming-scala_2.10</exclude> >> >> <exclude>org.apache.flink:flink-scala-shell_2.10</exclude> >> <exclude>org.apache.flink:flink-python</exclude> >> <exclude>org.apache.flink:flink-metrics-core</exclude> >> <exclude>org.apache.flink:flink-metrics-jmx</exclude> >> >> <exclude>org.apache.flink:flink-statebackend-rocksdb_2.10</exclude> >> <!-- Also exclude very big transitive dependencies of Flink >> WARNING: You have to remove these excludes if your >> code relies on other versions of these >> dependencies. --> >> <exclude>log4j:log4j</exclude> >> <exclude>org.scala-lang:scala-library</exclude> >> <exclude>org.scala-lang:scala-compiler</exclude> >> <exclude>org.scala-lang:scala-reflect</exclude> >> <exclude>com.data-artisans:flakka-actor_*</exclude> >> <exclude>com.data-artisans:flakka-remote_*</exclude> >> <exclude>com.data-artisans:flakka-slf4j_*</exclude> >> <exclude>io.netty:netty-all</exclude> >> <exclude>io.netty:netty</exclude> >> <exclude>commons-fileupload:commons-fileupload</exclude> >> <exclude>org.apache.avro:avro</exclude> >> <exclude>commons-collections:commons-collections</exclude> >> <exclude>org.codehaus.jackson:jackson-core-asl</exclude> >> <exclude>org.codehaus.jackson:jackson-mapper-asl</exclude> >> >> <exclude>com.thoughtworks.paranamer:paranamer</exclude> >> <exclude>org.xerial.snappy:snappy-java</exclude> >> <exclude>org.apache.commons:commons-compress</exclude> >> <exclude>org.tukaani:xz</exclude> >> <exclude>com.esotericsoftware.kryo:kryo</exclude> >> <exclude>com.esotericsoftware.minlog:minlog</exclude> >> <exclude>org.objenesis:objenesis</exclude> >> <exclude>com.twitter:chill_*</exclude> >> <exclude>com.twitter:chill-java</exclude> >> <exclude>commons-lang:commons-lang</exclude> >> <exclude>junit:junit</exclude> >> <exclude>org.apache.commons:commons-lang3</exclude> >> <exclude>org.slf4j:slf4j-api</exclude> >> <exclude>org.slf4j:slf4j-log4j12</exclude> >> <exclude>log4j:log4j</exclude> >> <exclude>org.apache.commons:commons-math</exclude> >> <exclude>org.apache.sling:org.apache.sling.commons.json</exclude> >> <exclude>commons-logging:commons-logging</exclude> >> <exclude>commons-codec:commons-codec</exclude> >> <exclude>com.fasterxml.jackson.core:jackson-core</exclude> >> >> <exclude>com.fasterxml.jackson.core:jackson-databind</exclude> >> >> <exclude>com.fasterxml.jackson.core:jackson-annotations</exclude> >> <exclude>stax:stax-api</exclude> >> <exclude>com.typesafe:config</exclude> >> <exclude>org.uncommons.maths:uncommons-maths</exclude> >> <exclude>com.github.scopt:scopt_*</exclude> >> <exclude>commons-io:commons-io</exclude> >> <exclude>commons-cli:commons-cli</exclude> >> </excludes> </artifactSet> <filters> >> <filter> >> <artifact>org.apache.flink:*</artifact> <excludes> >> <!-- exclude shaded google but include shaded >> curator --> >> <exclude>org/apache/flink/shaded/com/**</exclude> >> <exclude>web-docs/**</exclude> </excludes> >> </filter> <filter> >> <artifact>*:*</artifact> <excludes> >> <exclude>META-INF/*.SF</exclude> >> <exclude>META-INF/*.DSA</exclude> >> <exclude>META-INF/*.RSA</exclude> </excludes> >> </filter> </filters> >> <createDependencyReducedPom>false</createDependencyReducedPom> >> </configuration> </execution> </executions> >> </plugin> <plugin> >> <groupId>org.apache.maven.plugins</groupId> >> <artifactId>maven-compiler-plugin</artifactId> >> <version>3.1</version> <configuration> >> <source>1.8</source> <target>1.8</target> >> </configuration> </plugin> <plugin> >> <groupId>org.apache.avro</groupId> >> <artifactId>avro-maven-plugin</artifactId> >> <version>1.8.1</version> <executions> >> <execution> <phase>generate-sources</phase> >> <goals> <goal>schema</goal> >> </goals> <configuration> >> <stringType>String</stringType> >> <fieldVisibility>PRIVATE</fieldVisibility> >> <sourceDirectory>${project.basedir}/src/main/schema/</sourceDirectory> >> >> <outputDirectory>${project.basedir}/src/main/java/</outputDirectory> >> </configuration> </execution> >> </executions> </plugin> <plugin> >> <groupId>org.apache.maven.plugins</groupId> >> <artifactId>maven-compiler-plugin</artifactId> >> <configuration> <source>1.8</source> >> <target>1.8</target> </configuration> </plugin> >> </plugins> </build></project> >> >> >> --------------------------------------------- >> >> >> On Sun, Feb 12, 2017 at 1:56 AM, Robert Metzger <rmetz...@apache.org> >> wrote: >> >>> Hi Nico, >>> The cassandra connector should be available on Maven central: >>> http://search.maven.org/#artifactdetails%7Corg.apac >>> he.flink%7Cflink-connector-cassandra_2.10%7C1.2.0%7Cjar >>> >>> Potentially, the issue you've mentioned is due to some shading issue. Is >>> the "com/codahale/metrics/Metric" class in your user code jar? >>> >>> On Thu, Feb 9, 2017 at 2:56 PM, Nico < <nico.franz...@gmail.com> >>> nico.franz...@gmail.com> wrote: >>> >>>> Hi, >>>> >>>> I would like to upgrade to the new stable version 1.2 - but i get an >>>> ClassNotFound exception when i start the application. >>>> >>>> Caused by: java.lang.NoClassDefFoundError: com/codahale/metrics/Metric >>>> at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1367) >>>> at com.datastax.driver.core.Cluster.init(Cluster.java:162) >>>> at com.datastax.driver.core.Cluster.connectAsync(Cluster.java:333) >>>> at com.datastax.driver.core.Cluster.connectAsync(Cluster.java:308) >>>> at com.datastax.driver.core.Cluster.connect(Cluster.java:250) >>>> at org.apache.flink.streaming.connectors.cassandra.CassandraSin >>>> kBase.open(CassandraSinkBase.java:67) >>>> at org.apache.flink.streaming.connectors.cassandra.CassandraTup >>>> leSink.open(CassandraTupleSink.java:42) >>>> at org.apache.flink.api.common.functions.util.FunctionUtils.ope >>>> nFunction(FunctionUtils.java:36) >>>> at org.apache.flink.streaming.api.operators.AbstractUdfStreamOp >>>> erator.open(AbstractUdfStreamOperator.java:112) >>>> at org.apache.flink.streaming.runtime.tasks.StreamTask.openAllO >>>> perators(StreamTask.java:386) >>>> at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(S >>>> treamTask.java:262) >>>> at org.apache.flink.runtime.taskmanager.Task.run(Task.java:655) >>>> at java.lang.Thread.run(Thread.java:745) >>>> >>>> >>>> So I think the cassandra connector is the reason for it. Moreover, i >>>> don't see a version 1.2 in the maven repository for the connector as >>>> mentioned in the doc. >>>> >>>> <dependency> >>>> <groupId>org.apache.flink</groupId> >>>> <artifactId>flink-connector-cassandra_2.10</artifactId> >>>> <version>1.2.0</version> >>>> </dependency> >>>> >>>> Is there a plan to release a new version? >>>> >>>> Best, >>>> Nico >>>> >>> >>> >> >> >