From fe77f8242347d0aad7aaa9869bcaf5fa9b810fce Mon Sep 17 00:00:00 2001 From: Alex Eftimiades Date: Fri, 31 Jul 2020 09:54:43 -0400 Subject: [PATCH] python java interop demo --- python-java/README.md | 3 + python-java/pom.xml | 97 ++++++++++++++++++++++++ python-java/src/clj/picklejar/core.clj | 3 + python-java/src/java/picklejar/Main.java | 17 +++++ 4 files changed, 120 insertions(+) create mode 100644 python-java/README.md create mode 100644 python-java/pom.xml create mode 100644 python-java/src/clj/picklejar/core.clj create mode 100644 python-java/src/java/picklejar/Main.java diff --git a/python-java/README.md b/python-java/README.md new file mode 100644 index 0000000..097d48c --- /dev/null +++ b/python-java/README.md @@ -0,0 +1,3 @@ +# FFI To Python From Java + +Beginner friendly wrapper from Python to Java through [libpython-clj](https://github.com/clj-python/libpython-clj). Demonstrates a minimal project that imports custom Clojure code and interfaces with Python from Java. diff --git a/python-java/pom.xml b/python-java/pom.xml new file mode 100644 index 0000000..9f02140 --- /dev/null +++ b/python-java/pom.xml @@ -0,0 +1,97 @@ + + + 4.0.0 + picklejar + picklejar + jar + 0.1.0-SNAPSHOT + picklejar + + 1.8 + 1.8 + + + + + Eclipse Public License + http://www.eclipse.org/legal/epl-v10.html + + + + + src/java + + + src/clj + + + + + test/clj + + + target + target/class-files + + + maven-assembly-plugin + + + + picklejar.Main + + + + jar-with-dependencies + + + + + make-assembly + package + + single + + + + + + + + + central + https://repo1.maven.org/maven2/ + + false + + + true + + + + clojars + https://repo.clojars.org/ + + true + + + true + + + + + + + + + org.clojure + clojure + 1.10.2-alpha1 + + + clj-python + libpython-clj + 1.45 + + + diff --git a/python-java/src/clj/picklejar/core.clj b/python-java/src/clj/picklejar/core.clj new file mode 100644 index 0000000..8021a7f --- /dev/null +++ b/python-java/src/clj/picklejar/core.clj @@ -0,0 +1,3 @@ +(ns picklejar.core + (:require [libpython-clj.require :refer [require-python]] + [libpython-clj.python :refer [py. py.. py.-] :as py])) diff --git a/python-java/src/java/picklejar/Main.java b/python-java/src/java/picklejar/Main.java new file mode 100644 index 0000000..23cb9d1 --- /dev/null +++ b/python-java/src/java/picklejar/Main.java @@ -0,0 +1,17 @@ +package picklejar; +import clojure.java.api.Clojure; +import clojure.lang.IFn; + +public class Main { + public static void main(String[] args) { + System.out.println("java main - enter"); + IFn require = Clojure.var("clojure.core", "require"); + // For using custom Clojure: + // require.invoke(Clojure.read("picklejar.core")); + require.invoke(Clojure.read("libpython-clj.require")); + require.invoke(Clojure.read("libpython-clj.python")); + IFn require_python = Clojure.var("libpython-clj.require", "require-python"); + require_python.invoke(Clojure.read("numpy")); + System.out.println("java main - done"); + } +}