You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2019/10/27 00:24:52 UTC

[calcite] 02/02: [CALCITE-3444] Upgrade SQLLine to 1.9.0, and solve "Class path contains multiple SLF4J bindings" problem

This is an automated email from the ASF dual-hosted git repository.

jhyde pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git

commit 293059c190d5347438f5bc77a4f844f86ce60226
Author: Julian Hyde <jh...@apache.org>
AuthorDate: Thu Oct 24 11:28:43 2019 -0700

    [CALCITE-3444] Upgrade SQLLine to 1.9.0, and solve "Class path contains multiple SLF4J bindings" problem
    
    Calcite's sqlline script generates target/fullclasspath.txt with two
    jar files that contain slf4j bindings. The solution is to remove
    slf4j-log4j12 from the generated classpath.
    
    This does not solve the problem on Windows, because sqlline.bat builds
    its classpath in a different way.
---
 pom.xml     | 2 +-
 sqlline     | 5 +++--
 sqlline.bat | 9 +++++++--
 3 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/pom.xml b/pom.xml
index 198ece2..93f6751 100644
--- a/pom.xml
+++ b/pom.xml
@@ -140,7 +140,7 @@ limitations under the License.
     <sketches.version>0.9.0</sketches.version>
     <slf4j.version>1.7.25</slf4j.version>
     <spark.version>2.2.0</spark.version>
-    <sqlline.version>1.8.0</sqlline.version>
+    <sqlline.version>1.9.0</sqlline.version>
     <tpcds.version>1.2</tpcds.version>
     <xalan.version>2.7.1</xalan.version>
     <xerces.version>2.9.1</xerces.version>
diff --git a/sqlline b/sqlline
index 0dc6a76..980e95a 100755
--- a/sqlline
+++ b/sqlline
@@ -28,10 +28,11 @@ esac
 
 # Build classpath on first call.
 # (To force rebuild, remove target/fullclasspath.txt.)
+# Remove slf4j-log4j, otherwise slf4j complains about multiple bindings.
 cd $(dirname $0)
 if [ ! -f target/fullclasspath.txt ]; then
-    mvn dependency:build-classpath -Dmdep.outputFile=target/classpath.txt
-    awk -v RS=: -v ORS=: '{if (!m[$0]) {m[$0]=1; print}}' \
+    ./mvnw dependency:build-classpath -Dmdep.outputFile=target/classpath.txt
+    awk -v RS=: -v ORS=: '{if (!m[$0] && $0 !~ /slf4j-log4j12/) {m[$0]=1; print}}' \
         target/classpath.txt \
         */target/classpath.txt > target/fullclasspath.txt
 fi
diff --git a/sqlline.bat b/sqlline.bat
index d338981..5aa2935 100644
--- a/sqlline.bat
+++ b/sqlline.bat
@@ -20,8 +20,13 @@
 :: > sqlline.bat
 :: sqlline> !connect jdbc:calcite: admin admin 
 
-:: Copy dependency jars on first call. (To force jar refresh, remove target\dependencies)
-if not exist target\dependencies (call mvn -B dependency:copy-dependencies -DoverWriteReleases=false -DoverWriteSnapshots=false -DoverWriteIfNewer=true -DoutputDirectory=target\dependencies)
+:: Copy dependency jars on first call.
+:: (To force jar refresh, remove core\target\dependencies)
+:: We remove slf4j-log4j, otherwise slf4j complains about multiple bindings.
+if not exist core\target\dependencies (
+  call .\mvnw -B dependency:copy-dependencies -DoverWriteReleases=false -DoverWriteSnapshots=false -DoverWriteIfNewer=true -DoutputDirectory=target\dependencies
+  del /q /s slf4j-log4j12-*.jar
+)
 
 java -Xmx1G -cp ".\target\dependencies\*;core\target\dependencies\*;cassandra\target\dependencies\*;druid\target\dependencies\*;elasticsearch\target\dependencies\*;geode\target\dependencies\*;file\target\dependencies\*;mongodb\target\dependencies\*;server\target\dependencies\*;spark\target\dependencies\*;splunk\target\dependencies\*" sqlline.SqlLine --verbose=true %*