Clojure和Java源代码在同一个NetBeans项目中

Clojure和Java源代码在同一个NetBeans项目中,java,netbeans,clojure,Java,Netbeans,Clojure,有人成功创建了一个结合Clojure和Java源代码的NetBeans项目吗 我有一些项目,其中驱动程序(启动、gui、用户首选项等)是用Java编写的,但逻辑是用Clojure编写的。目前,我将Clojure代码编译到一个项目中的jar中,并将其作为库导入到一个单独的Java项目中。如果所有的源代码都可以合并到一个NetBeans项目中,那就很方便了 有人想出了这样做的方法吗?一个可能的解决方案是修改您的NetBeans Java项目的Ant脚本(根目录中的build.xml)以获得它 默认情

有人成功创建了一个结合Clojure和Java源代码的NetBeans项目吗

我有一些项目,其中驱动程序(启动、gui、用户首选项等)是用Java编写的,但逻辑是用Clojure编写的。目前,我将Clojure代码编译到一个项目中的jar中,并将其作为库导入到一个单独的Java项目中。如果所有的源代码都可以合并到一个NetBeans项目中,那就很方便了


有人想出了这样做的方法吗?

一个可能的解决方案是修改您的NetBeans Java项目的Ant脚本(根目录中的build.xml)以获得它

默认情况下,NetBeans在根项目目录的build.xml中创建多个占位符Ant目标,供您覆盖以自动化标准构建过程之外的任务(例如编译其他语言以在当前项目中使用它们的库)。通过覆盖构建脚本中的一个占位符目标,例如“-pre compile”,您可以编写一个简单的目标,使用Ant“exec”任务调用Clojure编译过程,并将所有生成的类文件(或JAR)放置在适当的构建目录中


如果经常这样做,可以定义一个Ant扩展(通过宏或Ant插件),这样就不必每次都修改build.xml。

我使用RT方法。我将Clojure代码放入脚本文件中,并在启动时包括和处理该脚本文件:

try {
            RT.loadResourceScript("com/mydomain/app/clojure_scripts.clj"); // Initialize Clojure script processor with our script
        } catch (Exception e) {
            Util.logException(e, "Unable to run Clojure initialization script.");
        }
然后,因为我的主要逻辑是Java,我只调用Clojure进行计算,所以我使用一些胶水代码为我映射调用:

/*
* Class to wrap Clojure scripts with Java friendly methods.
 */
public class Clojure {
    private static final String ns="com.mydomain.app";

    public static double calculate(final double size, final double otherVar) {
        Var report=RT.var(ns, "calculate");
        return (Double) report.invoke(size, otherVar);
    }
};

我在Netbeans中没有这样做,但在Eclipse中也可以这样做:将所有内容设置为Java项目,在类路径中使用clojure JAR,并在构建中包含.clj文件,以便它们在运行时在类路径上可用。这是一个好主意!。我过去曾将占位符目标用于其他目的,但我从未想到过这一点。很高兴它对您起到了很好的作用!实际上,我得到了这个想法,因为我们需要使用Ant作为我公司设计的专有语言的构建脚本语言(除非我们想手工编译/链接每个源文件)。在Ant中编写构建工具,让我们将这种脆弱的中间语言与所有Eclipse/NetBeans Java项目集成起来。