Maison >Java >javaDidacticiel >Comment puis-je appeler efficacement des fonctions Clojure depuis Java ?

Comment puis-je appeler efficacement des fonctions Clojure depuis Java ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-02 10:43:09584parcourir

How Can I Efficiently Call Clojure Functions from Java?

Appeler Clojure depuis Java

Introduction :

L'interface entre Clojure et Java est une opération courante exigence dans de nombreux projets. Cependant, les anciennes approches utilisant clojure.lang.RT sont désormais obsolètes. Dans cet article, nous expliquerons une méthode simplifiée pour effectuer cette intégration, en supposant un pot Clojure pré-construit et son inclusion dans le chemin de classe.

Instructions étape par étape :

  1. Créer un espace de noms Clojure :

    Définir un espace de noms Clojure avec le mot-clé :gen-class pour spécifier une classe Java et des méthodes accessibles depuis Java. Par exemple :

    (ns com.domain.tiny
      (:gen-class
        :name com.domain.tiny
        :methods [#^{:static true} [binomial [int int] double]]))
  2. Définissez un wrapper de méthode statique :

    Enveloppez la fonction Clojure que vous souhaitez appeler depuis Java avec un Java- wrapper appelable, préfixé par un trait d'union (par exemple, -binomial). Cela permet à Java d'invoquer la fonction Clojure.

  3. Construisez et incluez le pot Clojure :

    Compilez l'espace de noms Clojure dans un fichier jar et incluez dans le chemin de classe du projet Java. Assurez-vous que le pot Clojure est également présent dans le chemin de classe.

  4. Appelez Clojure depuis Java :

    Dans votre programme Java, importez la classe Clojure et appelez les méthodes statiques comme s’il s’agissait de méthodes Java. Par exemple :

    import com.domain.tiny;
    
    public class Main {
        public static void main(String[] args) {
            System.out.println("(binomial 5 3): " + tiny.binomial(5, 3));
        }
    }
  5. Définir les paramètres de compilation :

    Lors de la compilation de la partie Java, spécifiez le chemin de classe pour inclure le pot et le package Clojure la classe résultante et se manifeste dans un JAR fichier.

Exemple mis à jour (à l'aide d'outils modernes) :

Utilisation de Clojure 1.5.1, Leiningen 2.1.3 et JDK 1.7.0 Mise à jour 25 :

Clojure Partie :

  • Créez un projet Leiningen et mettez à jour project.clj avec ce qui suit :

    ; Same as the original example code from the introduction
  • Assurez-vous que les dépendances sont résolues à l'aide de lein deps.
  • Emballez le code Clojure dans un pot en utilisant lein pot.
  • Placez le pot Clojure et le pot Clojure construit dans un emplacement pratique.

Partie Java :

  • Créer une classe Java (par exemple, Main.java) comme dans l'exemple original.
  • Compiler la classe Java :

    javac -g -cp target\com.domain.tiny-0.1.0-SNAPSHOT.jar -d target\src\com\domain Main.java
  • Créez un fichier manifeste (Manifest.txt) :

    ; Same as the original example code from the introduction
  • Emballez la classe Java avec les pots Clojure dans un fichier JAR :

    jar cfm Interop.jar Manifest.txt Main.class lib\com.domain.tiny-0.1.0-SNAPSHOT.jar lib\clojure-1.5.1.jar
  • Exécutez Java programme :

    java -jar Interop.jar

Cet exemple mis à jour démontre l'interopérabilité entre Clojure et Java à l'aide d'outils contemporains.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn