zoukankan      html  css  js  c++  java
  • clojure打包发表jar 及java 调用

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

    每一点配置都不能含糊。

    一 clojure配置与打包

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

     参考

    https://clojuredocs.org/clojure.core/gen-class 

    (ns post-video.core
      (:gen-class
        :main false
        :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源代码

    参考

    https://stackoverflow.com/questions/10759343/make-lein-uberjar-without-source-files

    但是里面也说了,不发布源代码其实意义不大,因为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工程:

     https://www.cnblogs.com/xuanmanstein/p/14148944.html

    2. 导入jar包

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

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

  • 相关阅读:
    js语法
    页面格式与布局
    css样式标签
    框架
    css样式表选择器
    最大值(东方化改题+老师给的题解)
    数字(东方化改题+老师给的正解)
    测试一下这个编辑器
    请让本题永远沉睡于此(东方化改题+给的标程)
    贪吃的yjj(东方化改题+给的标程)
  • 原文地址:https://www.cnblogs.com/xuanmanstein/p/14149037.html
Copyright © 2011-2022 走看看