From 3b6059bbd84566635f877b887378a75f7223698f Mon Sep 17 00:00:00 2001
From: Kevin Risden <risdenk@users.noreply.github.com>
Date: Fri, 18 May 2018 17:33:31 -0500
Subject: [PATCH] [core] Fix ycsb.sh and ycsb.bat missing core dependencies
 (#908)

---
 bin/ycsb.bat | 13 +++++++++++--
 bin/ycsb.sh  | 36 +++++++++++++++++++-----------------
 core/pom.xml | 28 ++++++++++++++++++++++++++++
 3 files changed, 58 insertions(+), 19 deletions(-)

diff --git a/bin/ycsb.bat b/bin/ycsb.bat
index ebf76e8e..10ada42c 100644
--- a/bin/ycsb.bat
+++ b/bin/ycsb.bat
@@ -155,7 +155,11 @@ GOTO classpathComplete
 
 :gotSource
 @REM Check for some basic libraries to see if the source has been built.
-IF EXIST "%YCSB_HOME%\%BINDING_DIR%\target\*.jar" GOTO gotJars
+IF EXIST "%YCSB_HOME%\core\target\dependency\*.jar" (
+  IF EXIST "%YCSB_HOME%\%BINDING_DIR%\target\*.jar" (
+    GOTO gotJars
+  )
+)
 
 @REM Call mvn to build source checkout.
 IF "%BINDING_NAME%" == "basic" GOTO buildCore
@@ -166,7 +170,7 @@ SET MVN_PROJECT=core
 :gotMvnProject
 
 ECHO [WARN] YCSB libraries not found.  Attempting to build...
-CALL mvn -pl com.yahoo.ycsb:%MVN_PROJECT% -am package -DskipTests
+CALL mvn -Psource-run -pl com.yahoo.ycsb:%MVN_PROJECT% -am package -DskipTests
 IF %ERRORLEVEL% NEQ 0 (
   ECHO [ERROR] Error trying to build project. Exiting.
   GOTO exit
@@ -178,6 +182,11 @@ FOR %%F IN (%YCSB_HOME%\core\target\*.jar) DO (
   SET CLASSPATH=!CLASSPATH!;%%F%
 )
 
+@REM Core dependency libraries
+FOR %%F IN (%YCSB_HOME%\core\target\dependency\*.jar) DO (
+  SET CLASSPATH=!CLASSPATH!;%%F%
+)
+
 @REM Database conf (need to find because location is not consistent)
 FOR /D /R %YCSB_HOME%\%BINDING_DIR% %%F IN (*) DO (
   IF "%%~nxF" == "conf" SET CLASSPATH=!CLASSPATH!;%%F%
diff --git a/bin/ycsb.sh b/bin/ycsb.sh
index ab899fc0..9443df6d 100755
--- a/bin/ycsb.sh
+++ b/bin/ycsb.sh
@@ -184,25 +184,21 @@ if $DISTRIBUTION; then
 # Source checkout
 else
   # Check for some basic libraries to see if the source has been built.
-  for f in "$YCSB_HOME"/"$BINDING_DIR"/target/*.jar ; do
-
+  if ! ls "$YCSB_HOME"/core/target/*.jar 1> /dev/null 2>&1 || \
+     ! ls "$YCSB_HOME"/"$BINDING_DIR"/target/*.jar 1>/dev/null 2>&1; then
     # Call mvn to build source checkout.
-    if [ ! -e "$f" ] ; then
-      if [ "$BINDING_NAME" = "basic" ] ; then
-        MVN_PROJECT=core
-      else
-        MVN_PROJECT="$BINDING_DIR"-binding
-      fi
-
-      echo "[WARN] YCSB libraries not found.  Attempting to build..."
-      mvn -pl com.yahoo.ycsb:"$MVN_PROJECT" -am package -DskipTests
-      if [ "$?" -ne 0 ] ; then
-        echo "[ERROR] Error trying to build project. Exiting."
-        exit 1;
-      fi
+    if [ "$BINDING_NAME" = "basic" ] ; then
+      MVN_PROJECT=core
+    else
+      MVN_PROJECT="$BINDING_DIR"-binding
     fi
 
-  done
+    echo "[WARN] YCSB libraries not found.  Attempting to build..."
+    if mvn -Psource-run -pl com.yahoo.ycsb:"$MVN_PROJECT" -am package -DskipTests; then
+      echo "[ERROR] Error trying to build project. Exiting."
+      exit 1;
+    fi
+  fi
 
   # Core libraries
   for f in "$YCSB_HOME"/core/target/*.jar ; do
@@ -211,13 +207,19 @@ else
     fi
   done
 
+  # Core dependency libraries
+  for f in "$YCSB_HOME"/core/target/dependency/*.jar ; do
+    if [ -r "$f" ] ; then
+      CLASSPATH="$CLASSPATH:$f"
+    fi
+  done
+
   # Database conf (need to find because location is not consistent)
   CLASSPATH_CONF=$(find "$YCSB_HOME"/$BINDING_DIR -name "conf" | while IFS="" read -r file; do echo ":$file"; done)
   if [ "x$CLASSPATH_CONF" != "x" ]; then
     CLASSPATH="$CLASSPATH$CLASSPATH_CONF"
   fi
 
-
   # Database libraries
   for f in "$YCSB_HOME"/"$BINDING_DIR"/target/*.jar ; do
     if [ -r "$f" ] ; then
diff --git a/core/pom.xml b/core/pom.xml
index 4dbef850..2a33ff51 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -60,6 +60,7 @@ LICENSE file.
       <version>2.1.4</version>
     </dependency>
   </dependencies>
+
   <build>
     <resources>
       <resource>
@@ -68,4 +69,31 @@ LICENSE file.
       </resource>
     </resources>
   </build>
+  
+  <profiles>
+    <profile>
+      <!-- Build profile when running via yscb.sh or yscb.bat-->
+      <id>source-run</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-dependency-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>stage-dependencies</id>
+                <phase>package</phase>
+                <goals>
+                  <goal>copy-dependencies</goal>
+                </goals>
+                <configuration>
+                  <includeScope>runtime</includeScope>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
 </project>
-- 
GitLab