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

Wie kann ich Clojure-Funktionen effizient aus Java aufrufen?

Barbara Streisand
Freigeben: 2024-12-02 10:43:09
Original
580 Leute haben es durchsucht

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]]))
    Nach dem Login kopieren
  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));
        }
    }
    Nach dem Login kopieren
  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
    Nach dem Login kopieren
    Nach dem Login kopieren
  • 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
    Nach dem Login kopieren
  • Erstellen Sie eine Manifestdatei (Manifest.txt):

    ; Same as the original example code from the introduction
    Nach dem Login kopieren
    Nach dem Login kopieren
  • 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
    Nach dem Login kopieren
  • Führen Sie Java aus Programm:

    java -jar Interop.jar
    Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage