Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建一个jar文件,用于从Java/Clojure执行_Java_Macos_Jar_Clojure_Executable Jar - Fatal编程技术网

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

创建一个jar文件,用于从Java/Clojure执行,java,macos,jar,clojure,executable-jar,Java,Macos,Jar,Clojure,Executable Jar,我想创建一个jar文件来执行,它是用java和clojure实现的。这是我采取的步骤 让我的java代码调用clojure代码 我可以生成一个jar文件(ThingOne-1.0.0-SNAPSHOT-standalone.jar),其中包含clojure核心和我的clojure代码,我还可以通过以下站点获得一个类文件(HelloJava.class),该类文件使用jar文件中的clojure代码- java代码如下:clojure代码作为ThingOne导入 import ThingOne.*

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

让我的java代码调用clojure代码 我可以生成一个jar文件(ThingOne-1.0.0-SNAPSHOT-standalone.jar),其中包含clojure核心和我的clojure代码,我还可以通过以下站点获得一个类文件(HelloJava.class),该类文件使用jar文件中的clojure代码-

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文件,则需要一个自定义类加载器,如:


<> Dao Wen说,除非你有特殊的需求,否则它不能满足。

< P>我了解你的用例如下:你有一个主要的java应用程序,你想利用java中的一些CuljueRead函数。最好的方法是创建一个:gen类,作为Clojure功能的门面。欲了解更多信息,请阅读

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

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

这是Java开发的标准方式,请不要将Clojure语言和您的库放在一个MonolithJAR中。如果你使用Leiningen(Maven),你就不需要它了

备选方案:当Clojure和Java源代码保持在一起时,我知道另一种构建项目的方法。虽然更脏,但效果不错。如果你想让我描述一下,请告诉我


编辑:如果以这种方式配置项目,则始终可以创建它的uberjar。Maven有一个。你在用Maven吗?maven插件可以选择设置主类。@gigadot:不,我没有使用maven。你使用的是Leiningen吗?你真的需要Java文件吗?看起来遵循中的步骤要容易得多,它将创建一个可运行的JAR文件,只调用指定Clojure生成的类中的
-main
函数。另外,为了获得灵感,请看一看GitHub项目,该项目使用Clojure创建一个类似桌面的托盘应用程序。我尝试了一个JAR来创建JAR文件,但它不会执行时出错。-我认为道文的评论完全回答了你的问题。请通读他链接到的Leiningen创建独立Java应用程序。安装非常简单:下载脚本并运行它。这里有一个文件,列出了所有可能的选项。@Ivan:clojure代码被称为Java代码中的API。Clojure只是整个计划的一小部分。我不确定Leiningen是否适用于本例。@在本例中,创建项目所依赖的Clojure库是否有意义?或者,Leiningen可以处理纯Java项目。请查看示例project.clj文件,搜索:java源路径。问:你如何引导Clojure?@Ivan:正如帖子(或链接页面)所述,我可以使用Leiningen创建一个uber jar文件,Java将uber jar文件中的API作为API调用。虽然我不确定这是否回答了你的“引导Clojure”问题。