Heim >Java >javaLernprogramm >Wie kann ich Clojure-Funktionen effizient aus Java aufrufen?

Wie kann ich Clojure-Funktionen effizient aus Java aufrufen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-02 10:43:09577Durchsuche

How Can I Efficiently Call Clojure Functions from Java?

Clojure aus Java aufrufen

Einführung:

Schnittstellen zwischen Clojure und Java sind weit verbreitet Anforderung in vielen Projekten. Allerdings sind ältere Ansätze mit clojure.lang.RT inzwischen veraltet. In diesem Beitrag erklären wir eine vereinfachte Methode zur Durchführung dieser Integration, vorausgesetzt, es handelt sich um ein vorgefertigtes Clojure-Glas und dessen Einbindung in den Klassenpfad.

Schritt-für-Schritt-Anleitung:

  1. Erstellen Sie eine Clojure Namespace:

    Definieren Sie einen Clojure-Namespace mit dem Schlüsselwort :gen-class, um eine Java-Klasse und Methoden anzugeben, auf die von Java aus zugegriffen werden kann. Zum Beispiel:

    (ns com.domain.tiny
      (:gen-class
        :name com.domain.tiny
        :methods [#^{:static true} [binomial [int int] double]]))
  2. Definieren Sie einen statischen Methoden-Wrapper:

    Umschließen Sie die Clojure-Funktion, die Sie von Java aus aufrufen möchten, mit einem Java- Aufrufbarer Wrapper, dem ein Bindestrich vorangestellt ist (z. B. -binomial). Dadurch kann Java die Clojure-Funktion aufrufen.

  3. Das Clojure-Jar erstellen und einbinden:

    Den Clojure-Namespace in eine JAR-Datei kompilieren und einbinden es im Klassenpfad des Java-Projekts. Stellen Sie sicher, dass das Clojure-Glas auch im Klassenpfad vorhanden ist.

  4. Clojure aus Java aufrufen:

    Importieren Sie in Ihrem Java-Programm die Clojure-Klasse und rufen Sie die statischen Methoden auf, als wären sie Java-Methoden. Zum Beispiel:

    import com.domain.tiny;
    
    public class Main {
        public static void main(String[] args) {
            System.out.println("(binomial 5 3): " + tiny.binomial(5, 3));
        }
    }
  5. Kompilierungsparameter festlegen:

    Geben Sie beim Kompilieren des Java-Teils den Klassenpfad an, um das Clojure-JAR und -Paket einzuschließen die resultierende Klasse und Manifest in einer JAR-Datei.

Aktualisiert Beispiel (Verwendung moderner Tools):

Verwendung von Clojure 1.5.1, Leiningen 2.1.3 und JDK 1.7.0 Update 25:

Clojure-Teil:

  • Erstellen Sie ein Leiningen project und aktualisieren Sie project.clj mit Folgendem:

    ; Same as the original example code from the introduction
  • Stellen Sie sicher, dass Abhängigkeiten mit lein deps aufgelöst werden.
  • Packen Sie den Clojure-Code mit lein jar in ein Glas.
  • Stellen Sie das Clojure-Glas und das gebaute Clojure-Glas an einen geeigneten Ort Standort.

Java-Teil:

  • Erstellen Sie eine Java-Klasse (z. B. Main.java) wie im Originalbeispiel.
  • Kompilieren Sie Java Klasse:

    javac -g -cp target\com.domain.tiny-0.1.0-SNAPSHOT.jar -d target\src\com\domain Main.java
  • Erstellen Sie eine Manifestdatei (Manifest.txt):

    ; Same as the original example code from the introduction
  • Verpacken Sie die Java-Klasse zusammen mit Clojure jars in eine JAR-Datei:

    jar cfm Interop.jar Manifest.txt Main.class lib\com.domain.tiny-0.1.0-SNAPSHOT.jar lib\clojure-1.5.1.jar
  • Führen Sie Java aus Programm:

    java -jar Interop.jar

Dieses aktualisierte Beispiel demonstriert die Interoperabilität zwischen Clojure und Java unter Verwendung moderner Tools.

Das obige ist der detaillierte Inhalt vonWie kann ich Clojure-Funktionen effizient aus Java aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn