栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何直接从Java调用Clojure函数

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何直接从Java调用Clojure函数

您忘记

require
了Clojure命名空间:

这是项目结构:

-rwxrwxr-x 1 alan alan  162 Sep 26 15:27 compile-run-java.bash*-rwxrwxr-x 1 alan alan  439 Oct 19  2016 project.clj*-rw-rw-r-- 1 alan alan  142 Sep 26 16:38 src/embedded_clojure/core.clj-rw-rw-r-- 1 alan alan  586 Sep 26 15:21 src-java/mypkg/Main.java-rw-rw-r-- 1 alan alan  125 Oct 19  2016 test/tst/embedded_clojure/core.clj

project.clj
文件:

(defproject embedded-clojure "0.1.0-SNAPSHOT"  :dependencies [    [org.clojure/clojure "1.8.0"]  ]  :java-source-paths ["src-java"]  :main embedded-clojure.core  :target-path "target/%s"  :profiles {:uberjar {:aot :all}})

这是调用嵌入式Clojure函数的Java类:

package mypkg;import clojure.java.api.Clojure;import clojure.lang.IFn;class Main {  public static void main( String[] args ) {    System.out.println( "Java Main.main()" );    // clojure.core is automatically "required"; you don't need to    IFn plus = Clojure.var("clojure.core", "+");    System.out.println( "  plus: " + plus.invoke(1, 2) );    // any other namespace needs to be "required"    IFn require = Clojure.var("clojure.core", "require");    require.invoke(Clojure.read("embedded-clojure.core"));    IFn add  = Clojure.var("embedded-clojure.core", "add");    System.out.println( "  add:  " +  add.invoke(2, 3) );  }}

Clojure文件:

(ns embedded-clojure.core  (:gen-class))(defn add [x y] (+ x y))(defn -main [& args]  (println "Clojure -main:  (add 4 5) =>" (add 4 5)))

Clojure测试文件:

(ns tst.embedded-clojure.core  (:use embedded-clojure.core        clojure.test))(deftest simple-add  (is (= 13 (add 6 7))))

运行脚本

compile-run-java.bash

#!/bin/bash  -vlein cleanlein uberjar# Use Java main()java -cp /home/alan/demo/embedded-clojure/target/uberjar/embedded-clojure-0.1.0-SNAPSHOT-standalone.jar   mypkg.Main# Use Clojure -mainjava -cp /home/alan/demo/embedded-clojure/target/uberjar/embedded-clojure-0.1.0-SNAPSHOT-standalone.jar   embedded_clojure/core

现在我们可以从命令行运行:

 > ./compile-run-java.bash#!/bin/bash  -vlein cleanlein uberjarCompiling 1 source files to /home/alan/demo/embedded-clojure/target/uberjar/classesCompiling embedded-clojure.coreCreated /home/alan/demo/embedded-clojure/target/uberjar/embedded-clojure-0.1.0-SNAPSHOT.jarCreated /home/alan/demo/embedded-clojure/target/uberjar/embedded-clojure-0.1.0-SNAPSHOT-standalone.jar# Use Java main()java -cp /home/alan/demo/embedded-clojure/target/uberjar/embedded-clojure-0.1.0-SNAPSHOT-standalone.jar   mypkg.MainJava Main.main()  plus: 3  add:  5# Use Clojure -mainjava -cp /home/alan/demo/embedded-clojure/target/uberjar/embedded-clojure-0.1.0-SNAPSHOT-standalone.jar   embedded_clojure/coreClojure -main:  (add 4 5) => 9

我们还可以

lein
用来运行Clojure
-main
或Clojure测试:

> lein testlein test tst.embedded-clojure.coreRan 1 tests containing 1 assertions.0 failures, 0 errors.> lein runClojure -main:  (add 4 5) => 9


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/454724.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号