当前位置: 首页 > 知识库问答 >
问题:

将Clojure夹在Java和Leiningen之间

申辉
2023-03-14

对于一个类,我需要编写一些JVM代码,我希望使用Clojure。我让它与软件堆栈的底部一起工作,但我无法使它在位于顶部和底部的GUI层之间工作。我的主要问题是让JavaGUI识别我的Clojure文件。我想使用Leiningen实现这一点,但Java编译解决方案似乎没有考虑到这种互操作。这里的答案似乎正是我所需要的。我不明白该把代码放在哪里等等(只是不够详细)。有人有什么建议吗?

我试着制作一个插件,但它似乎不起作用。我知道我的案例肯定处于问题的边缘,但一个解决方案将使在课堂环境中使用Clojure变得更容易。

谢谢

更多细节:

我在使用编译的Clojure jar时运气不太好。我需要创建一个(呃)有状态的Clojure类(即方法不能是静态的)。我的类(src/final_project/MyLinkLayer.clj)的代码如下所示

(ns final_project.MyLinkLayer
  (:gen-class))

(defn -init[s] (print s))
(defn -send [dest data len] (println data))
(defn -recv [trans] (println trans))
(defn -status [] (println "I am a status!"))
(defn -command [cmd value] (println (str cmd " with value=" value)))

我的项目。clj是

(defproject final_project "0.1.0-SNAPSHOT"
  :description "A simulated MAC layer."
  :dependencies [[org.clojure/clojure "1.4.0"]
                 [local/classFiles "1"]]
  :aot [final_project.MyLinkLayer])

类编译(lein compile)精细到目标/类/final_project/,但是方法不显示。我可以通过jar加载类(使用Maven在顶部Java我的项目导入包的一部分工作得很好)。我甚至用Eclipse检查了. class文件,生成的唯一方法是那些来自Object的方法。有什么想法吗?此外,一旦我真正进入Clojure类的“有状态”部分,有人有什么想法吗?提前感谢。

共有1个答案

令狐弘益
2023-03-14

当我编写同时使用Clojure和Java的项目时,我通常使用Maven而不是Leiningen——原因很简单,大多数Java工具(例如Eclipse)对Maven的理解比目前对Leiningen的理解要好。

下面是一个pom示例。我用于polyglot Clojure/Java项目的xml:

  • https://github.com/mikera/clojure-pom/blob/master/pom.xml

请注意以下主要功能:

  • 使用clojure maven插件
  • 将Clojure源目录配置为资源-这确保了。clj文件被视为资源,并以任何形式捆绑在一起。jar文件生成并可以在运行时动态加载(这可能会解决Java无法识别.clj文件的问题)
  • 包括clojars。org作为一个存储库-对于严肃的Clojure开发来说非常重要
 类似资料:
  • 问题内容: 是否可以使用leiningen在项目中与Clojure一起轻松管理和编译本机Java类? 我的工作水平很低(使用netty nio),并且认为某些管道类实际上在构造代码和性能方面都更容易作为原始Java处理。 问题答案: 在Leiningen教程中有以下声明 对于包含某些Java代码的项目,可以将project.clj中的:java-source- path键设置为包含Java文件的目

  • 我正在测试Clojure/Java互操作。我创建了一个新的Leiningen项目并创建了这个项目。clj文件以及我将使用的几个依赖项: 我还包含了“java-Source-路径”列表,并将一个hello.java文件放入src/java目录,如下所示: 然后我创造了这个核心。模板中的clj文件: 如您所见,我甚至没有在应用程序函数中使用hello java类,我只是需要它,但当我在终端中运行“le

  • 作为Clojure的新手,我使用leiningen创建了一个示例项目 它给了我这个目录 在不修改任何文件的情况下,我可以使用 但是我无法使用运行测试从REPL做同样的事情 我试过(但不起作用)

  • Clojure/Leiningen/Eclipse(和Java)newby。我试图让Eclipse加载Clojure/Leiningen项目,但在搜索Lein插件解决方案时,我看到了令人困惑/矛盾的结果。 Eclipse IDE for Java开发者版本:Juno Service Release 2构建id:20130225-0426(Windows 8) 我在中有以下用户配置文件。lein\p

  • 我正试图让Clojure根据本教程为Android编译:https://github.com/clojure-android/lein-droid/wiki/Tutorial 然而,我遇到了一个问题 错误 这似乎是因为我有Java1.8,但我的代码需要与Android项目的1.7兼容。 在将一个模块包含到一个项目后,得到了“不支持的类文件版本52.0”,这似乎表明我可以设置源兼容性和目标兼容性(在

  • 问题内容: 到目前为止,这是我的project.clj文件: 和我的core.clj文件: 显示Hello World消息就好了。所以下次我尝试并获得 到目前为止,一切似乎进展顺利,所以我尝试了,然后我收到了 我在这里怎么做错了? 问题答案: 您需要向名称空间添加声明: