I understand that. But if we remove calcite-elasticsearch2 from sqlline’s classpath, sqlline will still get calcite-elasticsearch5 and the elastic search 5.x client driver libraries that it depends upon.
And the elastic search 2.x client driver libraries will not be on sqlline's class path, because calcite-elasticsearch2 is the only module that depends on them. So there will be no clash. Julian > On Sep 28, 2017, at 9:53 AM, Christian Beikov <christian.bei...@gmail.com> > wrote: > > The elasticsearch2 module depens on the elasticsearch client driver libraries > with version 2.x and the elasticsearch5 module depends on the elasticsearch > client driver libraries with version 5.x. That's the version conflict Kunwar > was running into. > > > Mit freundlichen Grüßen, > ------------------------------------------------------------------------ > *Christian Beikov* > Am 28.09.2017 um 18:35 schrieb Julian Hyde: >> Christian, >> >> I don’t understand. The elasticsearch5 module does not depend on the >> elasticsearch2 module, only on core and linq4j. Therefore if it (and its >> dependencies) are added to sqlline’s class path, it should have everything >> it needs. What am I missing? >> >> Julian >> >> >>> On Sep 27, 2017, at 11:02 PM, Christian Beikov <christian.bei...@gmail.com> >>> wrote: >>> >>> Well it's not so simple I suppose. You also need to exclude the >>> elasticsearch2 maven module from the pom.xml since that one is actually >>> contributing the elasticsearch client to the classpath. For the sake of >>> simplicity, we could introduce profiles that only have a specific ES >>> version, but that doesn't scale obviously regarding possible other version >>> combinations. >>> >>> I can introduce a profile if you want, but a real fix as I said needs >>> classloader magic like what e.g. JBoss Modules does. >>> >>> >>> Mit freundlichen Grüßen, >>> ------------------------------------------------------------------------ >>> *Christian Beikov* >>> Am 27.09.2017 um 20:28 schrieb Julian Hyde: >>>> I agree with Christian that it’s just a problem with sqlline’s class path. >>>> The simplest solution is to remove elasticsearch2 from the line that >>>> builds the class path: >>>> >>>> for module in core cassandra druid elasticsearch2 elasticsearch5 file >>>> mongodb spark splunk example/csv example/function; do >>>> CP=${CP}${module}/target/classes: >>>> CP=${CP}${module}/target/test-classes: >>>> done >>>> >>>> Then sqlline will work out of the box for ES5. People who want to run ES2 >>>> will have to edit the script. >>>> >>>> Kunwar, Can you please log a JIRA case? >>>> >>>> Christian, Can you you fix it? >>>> >>>> It’s conceivable that someone would want to combine data from an ES2 and >>>> ES5 instance, but we don’t have an answer for them, whether they invoke >>>> Calcite via sqlline or any other way. The incompatible libraries will >>>> clash, unless there is some class-loader magic keeping them in different >>>> namespaces. The right answer is probably something like Jboss modules, but >>>> it’s low priority. >>>> >>>> Julian >>>> >>>> >>>>> On Sep 27, 2017, at 9:29 AM, Christian Beikov >>>>> <christian.bei...@gmail.com> wrote: >>>>> >>>>> Depends if you want to be able to connect to an ES2 and ES5 server at the >>>>> same time through sqlline. >>>>> >>>>> Am 27.09.2017 17:53 schrieb "Josh Elser" <josh.el...@gmail.com>: >>>>> >>>>>> A quick solution is to add some documentation around how to give a >>>>>> specific version of ElasticSearch at build-time. This would help folks >>>>>> build Calcite with the exact version that they want (assuming that the >>>>>> API >>>>>> hasn't changed and the adapter actually works with that version of ES) >>>>>> >>>>>> We don't need to have multiple versions of ElasticSearch on the classpath >>>>>> at once, right? >>>>>> >>>>>> On 9/27/17 2:13 AM, Christian Beikov wrote: >>>>>> >>>>>>> Sqlline is problematic as it will have both elastic search versions on >>>>>>> the classpath. I haven't thought about that before. In the meantime you >>>>>>> could remove old versions of libraries from the >>>>>>> "target/fullclasspath.txt" >>>>>>> file to workaround the classpath problem. >>>>>>> >>>>>>> @Julian Hyde: How should we deal with something like this? We'd need >>>>>>> isolated "modules" instead of a flat class path for sqlline. Maybe we >>>>>>> could >>>>>>> build sqlline on JBoss Modules(https://github.com/jbo >>>>>>> ss-modules/jboss-modules) to achieve that? >>>>>>> >>>>>>> >>>>>>> Mit freundlichen Grüßen, >>>>>>> ------------------------------------------------------------------------ >>>>>>> *Christian Beikov* >>>>>>> Am 27.09.2017 um 01:30 schrieb Kunwar Deep Singh Toor: >>>>>>> >>>>>>>> ---------- Forwarded message ---------- >>>>>>>> From: Kunwar Deep Singh Toor <kt...@g.clemson.edu> >>>>>>>> Date: Mon, Sep 25, 2017 at 8:16 PM >>>>>>>> Subject: ElasticSearch5 not working >>>>>>>> To: dev-i...@calcite.apache.org >>>>>>>> >>>>>>>> >>>>>>>> Hi, >>>>>>>> >>>>>>>> I have been trying to connect to the ElasticSearch suing ES adapter >>>>>>>> through sqlline. I was able to connect to ES 2.1.4 using the ES2 >>>>>>>> adapter >>>>>>>> but when I try connecting to ES 5.1.1 using the ES5 adapter the >>>>>>>> following >>>>>>>> error pops up, I checked the logs for ElasticSearch and it does not >>>>>>>> show a >>>>>>>> connection attempt being made. >>>>>>>> >>>>>>>> The following is the error: >>>>>>>> java.lang.NoSuchMethodError: org.elasticsearch.transport.cl >>>>>>>> ient.PreBuiltTransportClient.addPlugins(Ljava/util/Collectio >>>>>>>> n;Ljava/util/Collection;)Ljava/util/Collection; >>>>>>>> at org.elasticsearch.transport.client.PreBuiltTransportClient.< >>>>>>>> init>(PreBuiltTransportClient.java:130) >>>>>>>> at org.elasticsearch.transport.client.PreBuiltTransportClient.< >>>>>>>> init>(PreBuiltTransportClient.java:116) >>>>>>>> at org.elasticsearch.transport.client.PreBuiltTransportClient.< >>>>>>>> init>(PreBuiltTransportClient.java:106) >>>>>>>> at org.apache.calcite.adapter.elasticsearch5.Elasticsearch5Sche >>>>>>>> ma.open(Elasticsearch5Schema.java:119) >>>>>>>> at org.apache.calcite.adapter.elasticsearch5.Elasticsearch5Sche >>>>>>>> ma.<init>(Elasticsearch5Schema.java:74) >>>>>>>> at org.apache.calcite.adapter.elasticsearch5.Elasticsearch5Sche >>>>>>>> maFactory.create(Elasticsearch5SchemaFactory.java:56) >>>>>>>> at org.apache.calcite.model.ModelHandler.visit(ModelHandler. >>>>>>>> java:269) >>>>>>>> at org.apache.calcite.model.JsonCustomSchema.accept(JsonCustomS >>>>>>>> chema.java:45) >>>>>>>> at org.apache.calcite.model.ModelHandler.visit(ModelHandler. >>>>>>>> java:195) >>>>>>>> at org.apache.calcite.model.ModelHandler.<init>(ModelHandler. >>>>>>>> java:87) >>>>>>>> at org.apache.calcite.jdbc.Driver$1.onConnectionInit(Driver. >>>>>>>> java:104) >>>>>>>> at org.apache.calcite.avatica.UnregisteredDriver.connect(Unregi >>>>>>>> steredDriver.java:139) >>>>>>>> at sqlline.DatabaseConnection.connect(DatabaseConnection.java:156) >>>>>>>> at sqlline.DatabaseConnection.getConnection(DatabaseConnection. >>>>>>>> java:204) >>>>>>>> at sqlline.Commands.connect(Commands.java:1095) >>>>>>>> at sqlline.Commands.connect(Commands.java:1001) >>>>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>>>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce >>>>>>>> ssorImpl.java:62) >>>>>>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe >>>>>>>> thodAccessorImpl.java:43) >>>>>>>> at java.lang.reflect.Method.invoke(Method.java:498) >>>>>>>> at sqlline.ReflectiveCommandHandler.execute(ReflectiveCommandHa >>>>>>>> ndler.java:38) >>>>>>>> at sqlline.SqlLine.dispatch(SqlLine.java:791) >>>>>>>> at sqlline.SqlLine.begin(SqlLine.java:668) >>>>>>>> at sqlline.SqlLine.start(SqlLine.java:373) >>>>>>>> at sqlline.SqlLine.main(SqlLine.java:265) >>>>>>>> >>>>>>>> I have recently started working on calcite and any help would be much >>>>>>>> appreciated. >>>>>>>> >>>>>>>> Thanks, >>>>>>>> >>>>>>>> Kunwar Singh >>>>>>>> >>>>>>>> >