diff --git a/jvm-packages/create_jni.bat b/jvm-packages/create_jni.bat
deleted file mode 100644
index 596374e30..000000000
--- a/jvm-packages/create_jni.bat
+++ /dev/null
@@ -1,19 +0,0 @@
-echo "copy native library"
-set libsource=..\lib\libxgboost4j.so
-
-if not exist %libsource% (
-goto end
-)
-
-set libfolder=src\main\resources\lib
-set libpath=%libfolder%\xgboost4j.dll
-if not exist %libfolder% (mkdir %libfolder%)
-if exist %libpath% (del %libpath%)
-copy %libsource% %libpath%
-echo complete
-exit
-
-:end
- echo "source library not found, please build it first by runing mingw32-make jvm"
- pause
- exit
diff --git a/jvm-packages/create_jni.py b/jvm-packages/create_jni.py
new file mode 100755
index 000000000..11a84ec77
--- /dev/null
+++ b/jvm-packages/create_jni.py
@@ -0,0 +1,109 @@
+#!/usr/bin/env python
+import errno
+import glob
+import os
+import shutil
+import subprocess
+import sys
+from contextlib import contextmanager
+from subprocess import check_output
+
+
+CONFIG = {
+ "USE_OPENMP": "ON",
+ "USE_HDFS": "OFF",
+ "USE_AZURE": "OFF",
+ "USE_S3": "OFF",
+
+ "PLUGIN_UPDATER_GPU": "OFF",
+ "JVM_BINDINGS": "ON"
+}
+
+
+@contextmanager
+def cd(path):
+ path = normpath(path)
+ cwd = os.getcwd()
+ os.chdir(path)
+ print("cd " + path)
+ try:
+ yield path
+ finally:
+ os.chdir(cwd)
+
+
+def maybe_makedirs(path):
+ path = normpath(path)
+ print("mkdir -p " + path)
+ try:
+ os.makedirs(path)
+ except OSError as e:
+ if e.errno != errno.EEXIST:
+ raise
+
+
+def run(command, **kwargs):
+ print(command)
+ subprocess.check_call(command, shell=True, **kwargs)
+
+
+def cp(source, target):
+ source = normpath(source)
+ target = normpath(target)
+ print("cp {0} {1}".format(source, target))
+ shutil.copy(source, target)
+
+
+def normpath(path):
+ """Normalize UNIX path to a native path."""
+ return os.path.join(*path.split("/"))
+
+
+if __name__ == "__main__":
+ if sys.platform == "darwin":
+ # Enable of your compiler supports OpenMP.
+ CONFIG["USE_OPENMP"] = "OFF"
+ os.environ["JAVA_HOME"] = check_output(
+ "/usr/libexec/java_home").strip().decode()
+
+ print("building Java wrapper")
+ with cd(".."):
+ maybe_makedirs("build")
+ with cd("build"):
+ if sys.platform == "win32":
+ # Force x64 build on Windows.
+ maybe_generator = ' -G"Visual Studio 14 Win64"'
+ else:
+ maybe_generator = ""
+
+ args = ["-D{0}:BOOL={1}".format(k, v) for k, v in CONFIG.items()]
+ run("cmake .. " + " ".join(args) + maybe_generator)
+ run("cmake --build .")
+
+ with cd("demo/regression"):
+ run(sys.executable + " mapfeat.py")
+ run(sys.executable + " mknfold.py machine.txt 1")
+
+ print("copying native library")
+ library_name = {
+ "win32": "xgboost4j.dll",
+ "darwin": "libxgboost4j.dylib",
+ "linux2": "libxgboost4j.so"
+ }[sys.platform]
+ maybe_makedirs("xgboost4j/src/main/resources/lib")
+ cp("../lib/" + library_name, "xgboost4j/src/main/resources/lib")
+
+ print("copying pure-Python tracker")
+ cp("../dmlc-core/tracker/dmlc_tracker/tracker.py",
+ "xgboost4j/src/main/resources")
+
+ print("copying train/test files")
+ maybe_makedirs("xgboost4j-spark/src/test/resources")
+ with cd("../demo/regression"):
+ run("{} mapfeat.py".format(sys.executable))
+ run("{} mknfold.py machine.txt 1".format(sys.executable))
+
+ for file in glob.glob("../demo/regression/machine.txt.t*"):
+ cp(file, "xgboost4j-spark/src/test/resources")
+ for file in glob.glob("../demo/data/agaricus.*"):
+ cp(file, "xgboost4j-spark/src/test/resources")
diff --git a/jvm-packages/create_jni.sh b/jvm-packages/create_jni.sh
deleted file mode 100755
index 902be52e2..000000000
--- a/jvm-packages/create_jni.sh
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/env bash
-
-set -e -x
-
-echo "build java wrapper"
-
-# cd to script's directory
-pushd `dirname $0` > /dev/null
-
-#settings according to os
-dl="so"
-USE_OMP=ON
-
-if [ $(uname) == "Darwin" ]; then
- export JAVA_HOME=$(/usr/libexec/java_home)
- dl="dylib"
- #change this to 0 if your compiler support openmp
- USE_OMP=OFF
-fi
-
-cd ..
-mkdir -p build
-cd build
-cmake .. -DJVM_BINDINGS:BOOL=ON -DUSE_OPENMP:BOOL=${USE_OMP}
-make
-cd ../jvm-packages
-echo "move native lib"
-
-libPath="xgboost4j/src/main/resources/lib"
-if [ ! -d "$libPath" ]; then
- mkdir -p "$libPath"
-fi
-
-rm -f xgboost4j/src/main/resources/lib/libxgboost4j.${dl}
-cp ../lib/libxgboost4j.${dl} xgboost4j/src/main/resources/lib/libxgboost4j.${dl}
-# copy python to native resources
-cp ../dmlc-core/tracker/dmlc_tracker/tracker.py xgboost4j/src/main/resources/tracker.py
-# copy test data files
-mkdir -p xgboost4j-spark/src/test/resources/
-cd ../demo/regression
-python mapfeat.py
-python mknfold.py machine.txt 1
-cd -
-cp ../demo/regression/machine.txt.t* xgboost4j-spark/src/test/resources/
-cp ../demo/data/agaricus.* xgboost4j-spark/src/test/resources/
-popd > /dev/null
-echo "complete"
diff --git a/jvm-packages/xgboost4j/pom.xml b/jvm-packages/xgboost4j/pom.xml
index bb4e4d1e8..d73775b6a 100644
--- a/jvm-packages/xgboost4j/pom.xml
+++ b/jvm-packages/xgboost4j/pom.xml
@@ -11,97 +11,7 @@
xgboost4j
0.7
jar
-
-
- NotWindows
-
-
- !windows
-
-
-
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
- 2.10.3
-
- protected
- true
-
-
-
- org.apache.maven.plugins
- maven-assembly-plugin
-
- false
-
-
-
- exec-maven-plugin
- org.codehaus.mojo
- 1.6.0
-
-
- native
- generate-sources
-
- exec
-
-
- create_jni.sh
-
-
-
-
-
-
-
-
- Windows
-
-
- windows
-
-
-
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
- 2.10.3
-
- protected
- true
-
-
-
- org.apache.maven.plugins
- maven-assembly-plugin
-
- false
-
-
-
- exec-maven-plugin
- org.codehaus.mojo
-
-
- native
- generate-sources
-
- exec
-
-
- create_jni.bat
-
-
-
-
-
-
-
-
+
junit
@@ -122,4 +32,45 @@
test
+
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ 2.10.3
+
+ protected
+ true
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+
+ false
+
+
+
+ exec-maven-plugin
+ org.codehaus.mojo
+
+
+ native
+ generate-sources
+
+ exec
+
+
+ python
+
+ create_jni.py
+
+ ${user.dir}
+
+
+
+
+
+