java 调用 clojure_clojure打包发表jar 及java 调用

折腾了半天打包。clojure因为语法凝练,所以微小的地方不注意,结果就不符合自己所需。

每一点配置都不能含糊。

一 clojure配置与打包

1 需要打包的源代码 gen-class

参考

(ns post-video.core

(:gen-class:mainfalse:methods [^:static [add1 [long] long]^:static [post_image [String] String]^:static [post_video [String] String]

]

)

(:require [clj-http.client :as client])

)

(defn-add1"I don't do a whole lot ... yet."

[a]

(+ 1, a))

需要说明的几点:

:main false 表示 不导出main函数

默认导出函数的前缀 :prefix ‘-’  减号,那么每个需要导出的函数都加这个前缀就好

:methods  声明每个方法的Java下的类型接口。   因为clj以纯函数为主,所以基本都是java类上的static方法。

方法名没有减号

然后 clojure默认的整数类型是java未装箱的基本数据类型long, String不变,其他暂时没用到,不清楚。

2 project.clj

(defproject post-video "0.1.0-SNAPSHOT":description"FIXME: write description":url"http://example.com/FIXME":license {:name"EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0":url"https://www.eclipse.org/legal/epl-2.0/"}

:dependencies [[org.clojure/clojure "1.10.1"]

[clj-http "3.10.3"]

[org.clojure/data.json "1.0.0"]

]

:main^:skip-aot post-video.core

:target-path "target/%s":profiles {:uberjar {:aot :all

:jvm-opts ["-Dclojure.compiler.direct-linking=true"]}}

:omit-source true;without custom .clj

)

我增加了一句是为了避免jar包里同时发布class和clj源代码

参考

但是里面也说了,不发布源代码其实意义不大,因为java的.class其实还是可以反编译的。

3 打包

cd 到project.clj所在路径

lein uberjar

显示

Compiling post-video.core

Created /home/XX/target/uberjar/post-video-0.1.0-SNAPSHOT.jar

Created /home/XX/target/uberjar/post-video-0.1.0-SNAPSHOT-standalone.jar

在项目路径下创建2个jar,standalone  好几M,包括了各种clojure库,可以独立发布,供java或者其他jvm下的语言调用。

二 在java下调用jar

1. 创建java工程

最轻量的java工程:

2. 导入jar包

把standalone.jar复制到lib里,重启或者刷新下,直到在左下java project里能看到

d1165d77634eaa33a53745dbb1e8f25c.png

然后main函数上方run按钮,运行,完事

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值