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

时间:2011-07-08 22:18:30

标签: java netbeans clojure

是否有人成功创建了一个结合Clojure和Java源的NetBeans项目?

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

有没有人想出办法来做到这一点?

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

我使用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);
    }
};