创建一个用于从Java / Clojure执行的jar文件

我想创建一个用java和clojure实现的jar文件。 这是我采取的步骤。

让我的java代码调用clojure代码

我可以生成一个包含clojure核心和我的clojure代码的jar文件(ThingOne-1.0.0-SNAPSHOT-standalone.jar),我还可以获得一个使用jar文件中的clojure代码的类文件(HelloJava.class)通过这个网站 – http://walkwithoutrhythm.net/blog/2012/03/26/how-to-call-clojure-1-dot-3-functions-from-java/

java代码如下:clojure代码作为ThingOne导入

import ThingOne.*; public class HelloJava { public static void main(String[] args) { System.out.println("Hello from Java!"); core.foo (12345); } } 

我可以运行此命令来使用代码:

 java -cp 'ThingOne-1.0.0-SNAPSHOT-standalone.jar:.' HelloJava 

制作一个jar文件

我制作了一个具有这种结构的jar目录。

 ├── MANIFEST.MF └── jar └── ThingOne-1.0.0-SNAPSHOT-standalone.jar 

MANIFEST.MF的内容是

 Manifest-Version: 0.1 Main-Class: HelloJava Class-Path: jar/ThingOne-1.0.0-SNAPSHOT-standalone.jar 

我可以使用jar cvfm hello.jar jar/MANIFEST.MF HelloJava.class获取一个jar文件。

但是,clojure jar文件(ThingOne-1.0.0-SNAPSHOT-standalone.jar)不包含在此jar文件中,只是引用了。

如何创建一个包含java类文件和clojure jar文件的jar文件?

如果你想制作一个包罗万象的jar,请使用以下工具:

  • Jar Jar链接
  • 一个-JAR™

如果您特别想要打包jar文件,则需要一个自定义类加载器,如:

  • 的JarClassLoader

也就是说,我会考虑到道文的建议,除非你有特殊的需要,否则就无法满足。

据我所知,您的用例如下:您拥有一个主要的Java应用程序,并且您希望使用Java中的一些Clojure函数。 最好的方法是创建一个:gen-class ,它将作为Clojurefunction的Facade。 欲了解更多信息,请阅读这篇文章 。

您需要创建一个由Leiningen管理的独立Clojure项目。 您可以将项目结果发布到本地mavan存储库(Leiningen是Maven的外观)。

在Java项目中为您的Clojure库添加依赖项,您不必担心clojure.jar,因为Maven会处理它。

这是在Java中开发的标准方法,请不要使用Clojure语言和其中的库来创建一个monolith Jar。 如果你使用Leiningen(Maven)你将不需要它。

替代方案:我知道构建项目的另一种方法,当Clojure和Java源代码保持在一起时。 它更脏但是有效。 如果您希望我对其进行描述,请告诉我。

编辑:如果您以这种方式配置项目,将始终可以创建它的uberjar。 Maven有一个插件 。